【问题标题】:C# .NET: Copy, Move and Delete File ProgressC# .NET:复制、移动和删除文件进度
【发布时间】:2018-12-23 04:46:06
【问题描述】:

问题

我需要制作一个对话框,其中有两个进度条:一个用于总进度(如果复制/移动/删除多个文件),另一个用于当前文件的进度。

我基本上需要有一些复制、移动和删除文件的方法,并知道相应过程的进度,以便更新我的视觉效果。

我已经发现了一个关于复制问题here 的问题,但这对于移动并不真正有效,因为如果您在同一个磁盘上移动文件,它们通常不会被复制,而是它们的目录会被改变. (移动到其他磁盘导致复制和删除)另外我不知道如何实现删除过程。

我已经尝试过的

好吧,鉴于我发布了一个复制过程解决方案的链接,我已经通过修改代码解决了复制部分(某种)问题,使其适合我的需要。

要求什么?

一种了解复制、移动或删除一个文件的过程的方法。如果我知道这一点,我就可以解决剩下的问题。

谢谢

【问题讨论】:

  • 我会为一个针对低代表用户的格式出奇的好问题给你一个赞成票..
  • 是的,即使在最多需要 50 毫秒的慢速主轴驱动器上也是如此。文件大小无关紧要,因为移动/删除只会影响目录条目。试试看。
  • Windows 不会将文件归零,当您删除文件时,它只会将其从文件分配表中删除。
  • 留在一个进度条上会不会很好,总结要移动或复制的字节总数 - 而不是文件(是的,即使物理移动只涉及更新文件系统条目) ,并按完成的字节数推进进度条,因此较大的文件会在进度条上占据更大的距离?我知道这不是您要求的,因此这是一个评论,但从 UX 的角度来看,IMO 是一种优越的方法,也是现代版本的 Windows(尝试)所做的。
  • 您是否已经查看过CopyFileEx 和/或MoveFileWithProgress?有documentation,它有一个自定义进度处理程序的回调返回progress per file in bytes transferred,还有一些sample code using this and a dialog as you describe it

标签: c# .net


【解决方案1】:

我曾经需要显示一个混合复制、移动和删除的进度条。对于复制计算进度很容易。您将计算基于字节。但是移动和删除呢?

我以“合成字节”为基础。移动或删除的成本主要来自寻址相关目录条目所需的磁盘寻道。因此,我将它们视为大致相当于一次磁盘寻道的合成字节数。对于磁盘,寻道时间约为 10 毫秒。以 100MB/秒计算,合成成本为 1MB。但我认为操作系统可以更有效地处理多个移动,所以,如果我没记错的话,我只是将移动/删除的成本设为 64KB。

进度条看起来相当合理,而且这个概念非常适合新的操作类型和新的磁盘类型 (SSD)。

我希望这适用于你的情况。

【讨论】:

  • 谢谢。我会看看合成字节的事情。
猜你喜欢
  • 1970-01-01
  • 2016-06-01
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多