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
это работает, но у меня есть 6 файлов, которые будут скопированы, но он останавливается на 5? как '5/6', почему это произошло? – Dhan
Это должно быть i + 1 .. Я забыл, что ваш цикл начинается с 0. Отредактировал мой код уже. И кстати, приятно видеть, что вы используете код, который я вам дал. : D –
Теперь он отлично работает! :) Снова, спасибо МНОГО! :) Я очень ценю ваши усилия, помогающие мне :), да, потому что этот код спас мою жизнь :) для моей будущей справки. :) – Dhan