You should consider using the win32 function CopyFileTransacted (Vista only) or CopyFileEx (Windows 2000 and later). They are provided by Windows and are optimized for speed.
I would recommend you test your own C # implementation performance and compare it with File.Copy's own performance. If the performance is comparable (i.e. the same order) than go with your custom C # implementation. Otherwise, it is better to use the CopyFileTransacted or CopyFileEx function.
Ps from here :
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
internal static extern bool CopyFileTransacted([In] string lpExistingFileName, [In] string lpNewFileName, [In] IntPtr lpProgressRoutine, [In] IntPtr lpData, [In, MarshalAs(UnmanagedType.Bool)] ref bool pbCancel, [In] CopyFileFlags dwCopyFlags, [In] KtmTransactionHandle hTransaction);
source
share