Ciao
In questo caso non penso ci sia una funzione apposta che ti fornisce la percentuale di completamento, quindi devi fare il lavoro a mano usando i FileStream.
Io l'ho implementata così, però puoi anche decidere di fare il lavoro su un Thread separato per lasciare l'interfaccia grafica più fluida:
'Crea il FileStream da cui leggere i dati
Dim input As New System.IO.FileStream("C:\File.dat", IO.FileMode.Open, IO.FileAccess.Read)
'Crea il FileStream su cui scrivere i dati
Dim output As New FileStream("C:\Copia.dat", FileMode.Create, FileAccess.Write)
'Crea un buffer temporaneo per il passaggio dei blocchi di dati (1 MB)
Dim bufSize As Integer = 1024 * 1024
Dim tmpBuf(bufSize) As Byte
'Imposta il valore massimo della ProgressBar sul numero di blocchi da copiare
Dim numBlocks As Integer = (input.Length + bufSize - 1) / bufSize
tuaProgressBar.Maximum = numBlocks
tuaProgressBar.Minimum = 0
tuaProgressBar.Value = 0
'Il numero di byte letti per il blocco
Dim read As Integer = input.Read(tmpBuf, 0, bufSize)
While (read > 0)
'Copia il blocco dal buffer nel file di output
output.Write(tmpBuf, 0, read)
'Incrementa di uno il valore della ProgressBar
tuaProgressBar.Value += 1
'Esegue gli eventi
Application.DoEvents()
'Legge un blocco di dati nel buffer
read = input.Read(tmpBuf, 0, bufSize)
End While
tuaProgressBar.Value = numBlocks
'Chiude gli Stream dei file
input.Close()
output.Close()
Luca