.NET中是否有办法备份一个包含多个子目录的目录,每个目录都包含大约100kb-500kb的大约10,000个或更多文件,而无需枚举?这里的用例是将文件备份到USB存储和NAS,但是由于文件计数,可能需要很长时间。我熟悉VSS,并创建了一些使用它的自定义备份应用程序,但是我想知道是否有一种方法可以快照包含这些文件并仅保存快照的卷每个文件。最终游戏要缩短复制操作所需的时间。
Windows Server备份功能可能是自定义构建解决方案的一个很好的选择。如果您正在运行Windows Server 2016,您可能会发现本文也解释了新功能也很有趣。
mft(主文件表(记录的大小仅为1k或1,024个字节,因此要检索名称,属性等。移动文件数据本身所需的读取。因此,通过文件目录记录列举并不是问题,并且消除处理的一部分不会在您的速度计上引起的闪烁,可以这么说。
我想您可以使用克隆软件尝试使用磁盘数据本身的低级别BIOS"克隆"(不是复制(。这可能会更快一些,因为磁盘头不必曲折。另一方面,如果您的硬盘是坚固的状态,此选项几乎不会产生效果,因为随机访问将与顺序访问一样快。
另一个选项是仅备份已更改的文件,通过检查每个文件的最后一个修改的日期时间戳记。一种简单的方法是将XCOPY命令与/D
交换机(无参数(一起使用,该命令将将最后备份的日期/时间与当前文件进行比较,并且如果硬盘上的文件是较新的,则仅执行复制比外部驱动器上的文件。
您可以调用与.NET的不同过程,并使用Robocopy将文件移动。它具有很多参数,例如指定要使用的线程数或时间戳检查等。
public static void Main()
{
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = "C:\Windows\System32\robocopy.exe Source Destination";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}