2016-01-25 1 views
0

Я пытаюсь написать код, который скопирует файлы из папки в другую папку с индикатором выполнения и с Label, которые подсчитывают файлы, например Copying 0 files of 10 files. но мой код не работает, а ошибки и ошибки.VB.NET Подсчитайте количество файлов для копирования с помощью WebClient

Collection was modified; enumeration operation may not execute.

это мой код:

Imports System.IO 
Imports System.Net 
Public Class Form1 

Dim filesToCopy As New ArrayList() 
Protected Overrides Sub OnLoad(ByVal e As EventArgs) 
    MyBase.OnLoad(e) 
    CopyBtn.Text = "Copy File" 
    CopyBtn.Parent = Me 
    ProgBar.Left = CopyBtn.Right 
End Sub 
Dim WithEvents CopyBtn As New Button 
Dim ProgBar As New ProgressBar 
Dim WithEvents FileCopier As New WebClient 
Public Sub check(ByVal sender As Object, ByVal e As EventArgs) Handles CopyBtn.Click 

    Dim src As String = "D:\test" 
    Dim dest As String = "D:\test2" 

    For Each Dir As String In System.IO.Directory.GetFiles(src) 
     Dim dirInfo As New System.IO.DirectoryInfo(Dir) 
     If Not System.IO.File.Exists(dest & "\" & dirInfo.Name) Then 
      filesToCopy.Add(dirInfo.Name) 
     End If 
    Next 

    If filesToCopy.Count > 0 Then 
     If MsgBox("There are new files found. Do you want to sync it now?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Confirm") = MsgBoxResult.Yes Then 
      For i = 0 To filesToCopy.Count - 1 
       Dim FileCopier As WebClient = New WebClient 
       AddHandler FileCopier.DownloadProgressChanged, AddressOf FileCopier_DownloadProgressChanged 
       AddHandler FileCopier.DownloadFileCompleted, AddressOf FileCopier_DownloadFileCompleted 

       CopyBtn.Enabled = False 
       ProgBar.Parent = Me 
       FileCopier.DownloadFileAsync(New Uri(src & "\" & filesToCopy(i)), dest & "\" & filesToCopy(i)) 

      Next 
     End If 
    Else 
     MsgBox("No new files to be copied") 
    End If 
End Sub 

это мой код, который отслеживает количество копирования файлов.

Private Sub FileCopier_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles FileCopier.DownloadProgressChanged 
    ProgBar.Value = e.ProgressPercentage 

    For Each file In filesToCopy 
     total += filesToCopy.Add(file) 
    Next 

    Label2.Text = total \ filesToCopy.Count 
End Sub 
End Class 

ответ

0

Добавьте его здесь вместо этого в DownloadProgressChanged

For i = 0 To filesToCopy.Count - 1 
      Dim FileCopier As WebClient = New WebClient 
      AddHandler FileCopier.DownloadProgressChanged, AddressOf FileCopier_DownloadProgressChanged 
      AddHandler FileCopier.DownloadFileCompleted, AddressOf FileCopier_DownloadFileCompleted 

     CopyBtn.Enabled = False 
     ProgBar.Parent = Me 
     FileCopier.DownloadFileAsync(New Uri(src & "\" & filesToCopy(i)), dest & "\" & filesToCopy(i)) 
     Label2.Text = i + 1 & "/" & FilesToCopy.Count 'PUT IT HERE INSTEAD 

    Next 
+0

это работает, но у меня есть 6 файлов, которые будут скопированы, но он останавливается на 5? как '5/6', почему это произошло? – Dhan

+0

Это должно быть i + 1 .. Я забыл, что ваш цикл начинается с 0. Отредактировал мой код уже. И кстати, приятно видеть, что вы используете код, который я вам дал. : D –

+0

Теперь он отлично работает! :) Снова, спасибо МНОГО! :) Я очень ценю ваши усилия, помогающие мне :), да, потому что этот код спас мою жизнь :) для моей будущей справки. :) – Dhan

 Смежные вопросы

  • Нет связанных вопросов^_^