gpt4 book ai didi

c# - 我可以在 .NET 中使用 FileInfo.CopyTo() 显示文件复制进度吗?

转载 作者:IT王子 更新时间:2023-10-29 04:10:16 25 4
gpt4 key购买 nike

我在 c#(.NET 2.0 Framework)中创建了一个复制实用程序,用于复制文件、目录和递归子目录等。该程序有一个 GUI,显示正在复制的当前文件、当前文件编号(序列)、要复制的文件总数和复制操作完成的百分比。还有一个进度条,它基于当前文件/总文件数。

我的问题与复制大文件有关。我一直无法找到一种方法来指示大文件的总复制进度(使用我当前使用 FileInfo.CopyTo 方法的类结构)。作为一种解决方法,我将文件复制操作和 GUI 显示分离到它们自己的线程中,并设置了一个视觉提示来显示工作正在完成。至少用户知道该程序没有卡住并且仍在复制文件。

如果能够根据总字节数显示进度,或者从 FileInfo.CopyTo 方法中触发某种类型的事件,指示从当前文件复制的总字节数,那就更好了。

我知道 FileInfo.Length 属性,所以我确定有一种方法 MacGuyver 我自己的事件基于此,并且在读取更新的 GUI 端有一个处理程序(可能基于检查使用某种类型的计时器的目标对象的 FileInfo.Length 属性?)。

有谁知道我忽略的执行此操作的方法。如果我能避免它,我宁愿不重写我的类来通过流复制字节并以这种方式跟踪它(尽管我认为我可能会坚持走这条路)。

PS - 我现在坚持使用 .NET 2.0 框架,所以任何需要 >= 3.0 中可用功能的解决方案都不是我的选择。

PPS - 我愿意接受任何 .NET 语言变体的解决方案,而不仅仅是 c#。

最佳答案

FileInfo.CopyTo 基本上是对 kernel32.dll 中 Win32 API 调用“CopyFile”的包装。该方法不支持进度回调。

但是,CopyFileEx 方法可以,您可以在几分钟内围绕它编写自己的 .NET 包装器,如下所述: http://www.pinvoke.net/default.aspx/kernel32.CopyFileEx

关于c# - 我可以在 .NET 中使用 FileInfo.CopyTo() 显示文件复制进度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/187768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com