我正在尝试在我的文件复制表单上取得进展,让它工作但进度条根据文件数量更新。问题是有很多小文件,还有一些非常大的文件需要复制。
所以我想知道是否有办法检查写入的字节数而不是使用文件号。 任何建议都非常感谢。这是我现在的代码:
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
string SourcePath = RegistryRead.ReadOriginalPath();
string DestinationPath = RegistryRead.ReadNewPath();
if (Directory.Exists(SourcePath))
{
//Now Create all of the directories
string[] allDirectories = Directory.GetDirectories(SourcePath, "*", SearchOption.AllDirectories);
string[] allFiles = Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories);
int numberOfItems = allDirectories.Length + allFiles.Length;
int progress = 0;
foreach (string dirPath in allDirectories)
{
Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
progress++;
BackgroundWorker.ReportProgress(100 * progress / numberOfItems);
}
//Copy all the files
foreach (string newPath in allFiles)
{
File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath));
progress++;
BackgroundWorker.ReportProgress(100 * progress / numberOfItems);
}
}
}
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Change the value of the ProgressBar to the BackgroundWorker progress.
progressBar1.Value = e.ProgressPercentage;
}
提前致谢
答案 0 :(得分:1)
如果你想自己做,你可以
很可能.net管理等同于CopyFileEx。
但是,我建议拨打SHFileOperation并让系统为您付出艰苦的努力。当你发现这个任务非常难以做好。作为使用shell完成工作的额外好处,您将获得标准系统对话框。
答案 1 :(得分:0)
您需要实现自己的文件复制代码,并从那里报告进度。
编辑: 如果您不想自己复制文件,可以启动另一个后台工作程序来检查文件复制进度(获取当前复制文件的属性,并检查其长度)。如果您没有遇到共享问题,它将为您提供更新进度条所需的信息。