我正在尝试在我的文件复制表单上取得进展,让它工作但进度条根据文件数量更新。 问题是有很多小文件,还有一些非常大的文件需要复制。

所以我想知道是否有一种方法来检查写入的字节数而不是使用文件号。 任何建议都非常感谢。 这是我现在的代码:

    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;
    }

提前致谢

===============>>#1 票数:1 已采纳

如果你想自己做,你可以

  1. 迭代计算要复制的总大小的所有文件。
  2. 调用CopyFileEx进行复制。 这使用回调机制来报告进度,并且回调包括为当前文件复制的字节数。
  3. 跟踪总共已复制的字节数,并使用它来报告总体进度。

很可能.net管理等同于CopyFileEx。

但是,我建议调用SHFileOperation并让系统为您努力工作。 当你发现这个任务非常难以做好。 作为使用shell完成工作的额外好处,您将获得标准系统对话框。

===============>>#2 票数:0

您需要实现自己的文件复制代码,并从那里报告进度。

编辑:如果您不想自己复制文件,可以启动另一个后台工作程序来检查文件复制进度(获取当前复制文件的属性,并检查其长度)。 如果您没有遇到共享问题,它将为您提供更新进度条所需的信息。

  ask by translate from so

未解决问题?本站智能推荐: