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

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

    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

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

1回复

使用进度栏复制不起作用

我有点小问题。 我正在尝试使用状态栏将表单的内容从A点复制到B的表单。 现在复制可以正常工作,但是状态栏什么也没做。任何人都有线索吗?
1回复

C#进度栏和EdtFTPnet Bytestransferred事件

您好在Stack Overflow看到的情况,几天以来,我一直在尝试解决一个问题。 我有一个问题,我想通过进度条显示通过FTP从远程文件的总字节数中传输的字节数。 在文档上已经写了如何使用FTPConnection作为示例来使用库中的ftp事件,但是我无法使其与BytesTransfer
2回复

清单 和复制字节数组?

所以我正在使用文件格式。 该文件格式包含大量数据...因此,我拥有的是用于“块”的List数组。 当我通过函数将数据添加到类时,这些添加到。 现在,当我保存文件时,我需要在开始时“插入”一个块。 现在我知道这可能没有意义,但是我需要在计算块中数据类型的数据偏移量之前添加该块(为空白)
1回复

ProgressBar问题:将文件夹复制到目标更新

在下面,我有用于复制应用程序导入功能的目录的代码,我想适当地更新进度条和标签。 香港专业教育学院一直在阅读有关后台工作者,它也适用于这种特殊情况。 这是代码:
3回复

后台工作者复制目录

在我的Windows窗体应用程序中,某些目录是应用户请求复制的。 目前,正在UI线程上运行这些目录,但无法复制。 当前复制功能正在触发我的以下代码。 复制功能具有以下代码。 我的代码运行正常,但是我看不到进度,也看不到Label中的更新。 有人可以帮我在新线程中运行
1回复

使用tcl fcopy复制大文件期间添加进度条

我有一个基于Tcl / Tk的应用程序,我需要从Windows向vm发送一些大文件。 我正在使用fcopy,它工作正常。 但是由于文件大小可能很大(以GB为单位),因此该应用程序被阻止1分钟或更长时间。 由于后续操作取决于文件的副本,因此我不能将其设为非阻塞/后台副本。 因此,我想显
1回复

使用进度条跟踪php copy()

我可能已经在SO的其他地方跳过了它,但是是否可以通过图形方式对其进行跟踪? 当我在本地服务器上复制了≈300MB媒体文件(note, not remotely) ,整个浏览器选项卡都忙,仅显示旋转的≈300MB夹图标,直到复制完成。 然后,该页面仅显示该操作之前打算显示的任何信息(file
6回复

使用进度条进行文件复制

我用过这段代码: 发布在这里 ( nobugz发布的那个)复制文件并在进度条中显示状态。 我希望在复制时不断增加进度条的值,尤其是大文件。 此示例代码中发生的情况是进度条中的值在复制的每个文件上停止,并且在复制一个文件之后,它将增加到要复制的下一个文件的大小。 我希望它像Win
1回复

递归复制进度文件

我之前在这里已经看到过有关Python和复制文件的问题,但是我有一个不同的情况要处理。 我一直在使用Linux发行版安装程序快要完成了,现在要做的就是将文件复制到目标分区。 由于大多数发行版安装程序都有进度条,因此我也希望添加一个。 现在,我正在使用PyQt4,我的代码如下所示:
1回复

将进度条从简单副本添加到C驱动器

我正在使用此代码: 这只是将Windows XP Service Pack从笔式驱动器复制到上方的C驱动器。 我希望将进度条添加到窗体,并需要代码才能执行此操作。 谢谢,