我正在编写一个企业应用程序,它将本地文件夹/文件(One Way Server--> local )与windows服务器网络文件共享上的相同文件夹/文件同步。我使用的是.Net框架中包含的File.Copy方法,它几乎可以完美地工作。如果本地PC上不存在文件,我会从服务器复制这些文件;如果本地PC上存在文件,我会比较修改日期;如果服务器版本较新,则会覆盖这些文件。
当应用程序正在复制一个大文件时,我遇到了问题,不管是什么原因,中断了,正在复制的文件没有完成。被中断的本地文件显示与服务器副本的大小完全相同,即使只传输了一小部分,但是如果您尝试打开它,在这种情况下,假设它是一个.zip或.pst文件,您可以看到它已损坏,无法打开。
我要么需要一种方法来确定文件是否没有完全传输,以便删除它并传输一个新的副本,要么可能需要一种不同的方法一起来完成我正在尝试完成的任务。请记住,速度是一个问题。
发布于 2015-02-25 08:37:34
作为一个全面的解决方案,您可能希望使用Microsoft Sync framework在不同设备上保持文件同步。
为了确保文件相同,您可以计算这两个文件的散列和并对它们进行比较。例如,使用SHA algorithm。这将需要完全读取这两个文件,因此可能会影响同步速度。
发布于 2015-02-25 08:52:11
使用不同的名称将文件复制到网络共享。例如:MyFile-copying in-process.dat
在没有错误的情况下完成后,只需将网络共享上的文件重命名为正确的名称:例如: MyFile.dat。
发布于 2015-02-25 08:46:03
永远不要使用文件修改日期或大小,而是可以使用(锁定),这是一个隐藏的小文件,它为文件夹中的每个文件保持锁定,例如(File1)在服务器上有一个名为(File1.lock)的锁定文件,它包含创建日期和修改日志...如果您正在复制新文件以覆盖File1,则锁的值将为0(例如),并且在复制完成后,锁将变为1,因此,如果锁的值为零,则意味着最近一次覆盖文件的尝试因各种原因而失败。这个想法类似于subversion产品,但细节较少。同样,正如前面提到的,你当然可以使用MS SYNC框架...
https://stackoverflow.com/questions/28709077
复制相似问题