C# 绕过Windows复制设计

C# 绕过Windows复制设计,c#,copy,system,C#,Copy,System,我一直在想办法简化将文件从一个驱动器(在我的情况下是网络或外部驱动器)复制到主系统驱动器的过程。除了创建一个每次都必须激活的程序,然后选择其中的所有信息,我没有真正好的设计来绕过它 我一直在想,是否有一种方法可以用我自己的方式截取一个直接的windows拷贝。基本的设计是,在抓取副本时(实际上,为了提高效率,需要一组不同的副本),程序将把所有单独的副本组织成一个副本流 我一直想这样做,因为最近几个月我的所有驱动器都出现故障,所以我需要备份大量数据并进行大量移动 编辑 现在,让我们假设我是从一个完

我一直在想办法简化将文件从一个驱动器(在我的情况下是网络或外部驱动器)复制到主系统驱动器的过程。除了创建一个每次都必须激活的程序,然后选择其中的所有信息,我没有真正好的设计来绕过它

我一直在想,是否有一种方法可以用我自己的方式截取一个直接的windows拷贝。基本的设计是,在抓取副本时(实际上,为了提高效率,需要一组不同的副本),程序将把所有单独的副本组织成一个副本流

我一直想这样做,因为最近几个月我的所有驱动器都出现故障,所以我需要备份大量数据并进行大量移动

编辑

现在,让我们假设我是从一个完全碎片整理的外部驱动器复制的(因为我是)。我们还假设我正在复制一个99%的碎片整理驱动器(因为我是)。如果我尝试一次移动每个文件,那么Windows copy方法非常有效,因为它只需要将一个连续的文件从一个驱动器流到另一个驱动器(很可能保持副本连续)。这基本上是最好的情况,我需要从那里搬到这里的一切。因此,复制方法以某种算法逻辑顺序(通常按文件名)获取文件,然后将数据读写到新位置

现在,考虑到实际情况,我将一组文件从不同的位置复制到第二个驱动器上的不同文件位置(假设已完全碎片整理,因为这是我的外部驱动器的情况)。我不希望在开始下一个拷贝之前等待每个拷贝都完成,所以我会在文件夹中挑选并选择要放在哪里,很快我的屏幕就会被复制窗口覆盖,显示所有试图同时运行的拷贝的状态。这表明,由于每个副本独立于其他副本进行,因此整个副本的速度会稍微减慢。这意味着,不是单个连续文件占用总可用带宽,而是所有这些文件共享的带宽大致相等(这也增加了磁盘的读写延迟,因为现在系统必须在返回到第一个文件之前从每个文件中获取一点)。仍然假设是最佳情况,这比所有文件都在一个位置并移动到一个位置要慢


我想做的是截取所有单独的下载,并将它们组织成一个下载列表,然后一个接一个地进行下载。

您可以很好地截取的唯一方法是FileSystemWatcher。

这可能就是您要找的


你需要根据这篇文章创建一个Shell扩展。

什么是“抓取副本”呢?你想实现你自己的文件复制功能,然后钩住标准的Windows复制过程并使用你自己的代码?为什么?与Windows Shell团队相比,您编写更好的文件复制算法的可能性非常低。他们已经做了一段时间了……似乎有人在SO上寻求帮助,但他不太可能比Windows Shell团队做得更好!有许多不同的复制场景,而Windowsshell优化的场景对于OP的情况可能特别糟糕。例如,他可能正在将一个源复制到多个目的地,这在Explorer中很难达到最佳效果。我不确定这对我有何帮助。我以前用过它,但只有一点点。如果我附加到一个文件创建事件,这是否会让我知道文件来自何处,因为这是我尝试绕过Windows复制然后尝试自己复制它的唯一方法。这也可能会出现这样的问题:如果我将几个文件从一个位置复制到同一个新位置,程序将不知道这一点,因为每个文件不是立即创建的,而是只有在读取开始时创建的。