Progressbar per copifiles

sabato 03 gennaio 2009 - 20.15

xxtr93 Profilo | Junior Member

Come poso fare per visualizzare in una progressbar il progresso di copia di alcuni files.

Io copio con FileSystemObject:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

R3GM4ST3R Profilo | Junior Member

Ciao!
Semplice, usi una progressbar come max value imposti il totale dei file da copiare, e ad ogni file copiato incrementi di 1 il value della progressbar.
Mi spiego meglio, prima di iniziare la copia dei files, dalla directory che contiene i files usi il metodo getfiles() che ritorna un array di stringhe (se non ricordo male)...
quindi
>progressbar.maxvalue = Directory.getfiles(*.*).length()

Insomma un possibile codice è :

private sub CopyFilesFromDir(s_strPath as tring)
dim o_Dir as new DirectoryInfo(s_strPath)
dim s_strFiles() as string = o_Dir.GetFiles(*.*)
me.progressbar.maxvalue = strFiles.length()
me.progressbar.value=0
dim s_TMP as string

for each s_TMP in s_strFiles
CopyFile(s_TMP, Destinazione, True)
me.progressbar.value=me.progressbar.value+1
next
end sub

un po' alla buona!

Ciao!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

xxtr93 Profilo | Junior Member

Non ho ben chiaro cosa intendi fare... potresti spiegarti un pochino meglio.

Dopo che imposto il valore massimo della progressbar, cosa devo fare:
ProgressBar1.Maximum = Directory.GetFiles(TextBox2.Text).Length

Io non ti sto chiedendo tanti files ma solo uno che è di grandi dimensioni e devo visualizzarne il progresso.

Grazie!

aiedail92 Profilo | Expert

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

xxtr93 Profilo | Junior Member

Sempre il migliore!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5