1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool CopyFileEx(
string lpExistingFileName,
string lpNewFileName,
CopyProgressRoutine lpProgressRoutine,
IntPtr lpData,
ref Int32 pbCancel,
CopyFileFlags dwCopyFlags);
delegate CopyProgressResult CopyProgressRoutine(
long TotalFileSize,
long TotalBytesTransferred,
long StreamSize,
long StreamBytesTransferred,
uint dwStreamNumber,
CopyProgressCallbackReason dwCallbackReason,
IntPtr hSourceFile,
IntPtr hDestinationFile,
IntPtr lpData);
int pbCancel;
enum CopyProgressResult : uint
{
PROGRESS_CONTINUE = 0,
PROGRESS_CANCEL = 1,
PROGRESS_STOP = 2,
PROGRESS_QUIET = 3
}
enum CopyProgressCallbackReason : uint
{
CALLBACK_CHUNK_FINISHED = 0x00000000,
CALLBACK_STREAM_SWITCH = 0x00000001
}
[Flags]
enum CopyFileFlags : uint
{
COPY_FILE_FAIL_IF_EXISTS = 0x00000001,
COPY_FILE_RESTARTABLE = 0x00000002,
COPY_FILE_OPEN_SOURCE_FOR_WRITE = 0x00000004,
COPY_FILE_ALLOW_DECRYPTED_DESTINATION = 0x00000008
}
private void XCopy(string oldFile, string newFile)
{
CopyFileEx(oldFile,newFile,new CopyProgressRoutine
(this.CopyProgressHandler),IntPtr.Zero,ref pbCancel,
CopyFileFlags.COPY_FILE_RESTARTABLE);
}
private CopyProgressResult CopyProgressHandler(
long total,
long transferred,
long streamSize,
long StreamByteTrans,
uint dwStreamNumber,
CopyProgressCallbackReason reason,
IntPtr hSourceFile,
IntPtr hDestinationFile,
IntPtr lpData)
{
this.waitForm.progressBarCopyFile.Maximum = Convert.ToInt32(total);
this.waitForm.progressBarCopyFile.Value = Convert.ToInt32(transferred);
this.waitForm.labelSize.Text = streamSize.ToString();
this.waitForm.labelTransf.Text = StreamByteTrans.ToString();
Application.DoEvents();
if (cancelCopy)
return CopyProgressResult.PROGRESS_CANCEL;
else
return CopyProgressResult.PROGRESS_CONTINUE;
}
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CreateDirectory(
string lpPathName,
IntPtr lpSecurityAttributes); |
Partager