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
| Imports System.Runtime.InteropServices
Imports System.ComponentModel
Public Class Form1
<DllImport("kernel32.dll", SetLastError:=True, EntryPoint:="MoveFileWithProgressW", CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function MoveFileWithProgress( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal lpProgressRoutine As CopyProgressRoutine, _
ByVal lpData As IntPtr, _
ByVal dwFlags As MoveFileFlags) As Boolean
End Function
Private Delegate Function CopyProgressRoutine( _
ByVal TotalFileSize As Int64, _
ByVal TotalBytesTransferred As Int64, _
ByVal StreamSize As Int64, _
ByVal StreamBytesTransferred As Int64, _
ByVal dwStreamNumber As UInt32, _
ByVal dwCallbackReason As CopyProgressCallbackReason, _
ByVal hSourceFile As IntPtr, _
ByVal hDestinationFile As IntPtr, _
ByVal lpData As IntPtr) As CopyProgressResult
Private Enum CopyProgressResult As UInt32
PROGRESS_CONTINUE = 0
PROGRESS_CANCEL = 1
PROGRESS_STOP = 2
PROGRESS_QUIET = 3
End Enum
Private Enum CopyProgressCallbackReason As UInt32
CALLBACK_CHUNK_FINISHED = 0
CALLBACK_STREAM_SWITCH = 1
End Enum
<Flags()>
Private Enum MoveFileFlags As UInt32
MOVE_FILE_REPLACE_EXISTSING = &H1
MOVE_FILE_COPY_ALLOWED = &H2
MOVE_FILE_DELAY_UNTIL_REBOOT = &H4
MOVE_FILE_WRITE_THROUGH = &H8
MOVE_FILE_CREATE_HARDLINK = &H10
MOVE_FILE_FAIL_IF_NOT_TRACKABLE = &H20
End Enum
Private Function OnCopyProgress( _
ByVal TotalFileSize As Int64, _
ByVal TotalBytesTransferred As Int64, _
ByVal StreamSize As Int64, _
ByVal StreamBytesTransferred As Int64, _
ByVal dwStreamNumber As UInt32, _
ByVal dwCallbackReason As CopyProgressCallbackReason, _
ByVal hSourceFile As IntPtr, _
ByVal hDestinationFile As IntPtr, _
ByVal lpData As IntPtr) As CopyProgressResult
Dim percent As Double = TotalBytesTransferred / TotalFileSize
progressbar1.value = percent
Return CopyProgressResult.PROGRESS_CONTINUE
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim result As Boolean = MoveFileWithProgress("D:\images.img", "C:\images.amg", AddressOf OnCopyProgress, IntPtr.Zero, MoveFileFlags.MOVE_FILE_WRITE_THROUGH Or MoveFileFlags.MOVE_FILE_COPY_ALLOWED)
End Sub
End Class |
Partager