即使在移动/重命名后,也可以在NTFS中唯一标识文件/文件夹

Fel*_*bek 3 directory backup synchronization ntfs file

我没有找到一个备份(同步)程序,它做了我想要的,所以我正在考虑编写自己的.

我现在做了以下事情:它遍历源中的数据,并且每个文件的存档位设置或目标中不存在,将其复制到目标,覆盖可能存在的文件.完成后,它会检查目标中的所有文件(如果它存在于源中),如果不存在,则删除它.

问题是,如果我移动或重命名一个大文件夹,它首先会被复制到目标,即使它原则上已存在,只是有一个不同的路径.然后删除已经存在的文件夹.

除了不必要的复制之外,我经常遇到空间问题,因为我的备份驱动器不够大,无法保存原始数据两次.

有没有办法以编程方式识别此类移动/重命名的文件或文件夹,即通过NTFS ID或媒体上的物理位置或其他内容?这个问题有解决方案吗?

我不关心编程语言,但是对于使用Python,C++,C#,Java或Prolog执行此操作的提示表示赞赏.

Gab*_*abe 6

你熟悉对象ID吗?这可能是您正在寻找的:http://msdn.microsoft.com/en-us/library/aa363997.aspx

您可能还想使用文件ID.您可以从得到这个FileId领域FILE_ID_BOTH_DIR_INFO你致电GetFileInformationByHandleExnFileIndexLownFileIndexHigh领域BY_HANDLE_FILE_INFORMATION,通过调用得到GetFileInformationByHandle.

虽然它需要您重新设计您的系统,但NTFS有一个名为变更日志的功能,专门针对这种情况而设计.它会跟踪每个已更改的文件,即使在重新启动时也是如此.当你的程序运行时,它会在它停止时读取更改日志.对于已删除的每个文件,请删除备份中的该文件.对于重命名的每个文件,请在备份上重命名该文件.对于创建或更改的每个文件,将该文件复制到备份中.现在,您可以简单地遍历您实际需要注意的文件列表,而不必同时遍历两个目录树.