2013-03-28 2 views
0

В настоящее время я делаю проект в vb.net, и я хочу установить индикатор выполнения при копировании файлов из одной папки в другую. И индикатор выполнения должен перейти к завершению в соответствии с количеством скопированных файлов.Как установить индикатор выполнения при копировании файла из одной папки в другую в vb.net?

+0

Примечание для читателей, которые ищут решения, где отдельный индикатор выполнения для каждого файла будет достаточно: 'My.Computer.FileSystem.CopyFile (OldLocation, NewLocation, FileIO.UIOption.AllDialogs)' покажет стандартное копирование Windows, дисплей. –

ответ

2

Концепция используется: Получить count of files в source directory, а затем когда это copyingfile от source folder к destination folder приращение variable, чтобы проследить, сколько files получить переданы. Теперь вычислим перенесенный процент files, используя следующую формулу,

% of files transferred = How many files Transferred * 100/Total No of files in source folder 

А потом после получения % of files transferred, обновлять значение прогресс бар путем его использования.

Попробуйте этот код: Tested with IDE

Dim xNewLocataion = "E:\Test1" 

     Dim xFilesCount = Directory.GetFiles("E:\Test").Length 
     Dim xFilesTransferred As Integer = 0 

     For Each xFiles In Directory.GetFiles("E:\Test") 

      File.Copy(xFiles, xNewLocataion & "\" & Path.GetFileName(xFiles), True) 
      xFilesTransferred += 1 

      ProgressBar1.Value = xFilesTransferred * 100/xFilesCount 
      ProgressBar1.Update() 

     Next 
+0

В настоящее время я использую эту вещь, но когда приходят большие файлы, похоже, что она зависает, поэтому я пытаюсь создать индикатор выполнения, работающий над общим размером всех выбранных файлов, например, если общий размер 5 файлов составляет 100 МБ, тогда, когда 50 МБ завершен индикатор выполнения должен быть в два раза, независимо от того, сколько файлов было перенесено. – daksh21ubuntu

1

Не так новый вопрос, но вот ответ, тем не менее. Следующий код достигнет желаемого результата, в результате которого отслеживается прогресс отдельного файла. Он использует 1 буфер MiB. В зависимости от ресурсов вашей системы вы можете настроить буфер, чтобы настроить производительность передачи.

Понятие: Подсчитайте каждый байт, поскольку он читается/записывается и сообщает о ходе работы на основе общего размера исходного файла, используя потоки файлов.

'Create the file stream for the source file 
Dim streamRead as New System.IO.FileStream([sourceFile], System.IO.FileMode.Open) 
'Create the file stream for the destination file 
Dim streamWrite as New System.IO.FileStream([targetFile], System.IO.FileMode.Create) 
'Determine the size in bytes of the source file (-1 as our position starts at 0) 
Dim lngLen as Long = streamRead.Length - 1 
Dim byteBuffer(1048576) as Byte 'our stream buffer 
Dim intBytesRead as Integer 'number of bytes read 

While streamRead.Position < lngLen 'keep streaming until EOF 
    'Read from the Source 
    intBytesRead = (streamRead.Read(byteBuffer, 0, 1048576)) 
    'Write to the Target 
    streamWrite.Write(byteBuffer, 0, intBytesRead) 
    'Display the progress 
    ProgressBar1.Value = CInt(streamRead.Position/lngLen * 100) 
    Application.DoEvents() 'do it 
End While 

'Clean up 
streamWrite.Flush() 
streamWrite.Close() 
streamRead.Close()