我有一个文件夹与音乐视频,我想备份从我的笔记本电脑到外部硬盘。我不想使用备份-图像,但直接文件副本,以便我可以直接观看音乐视频从备份硬盘上的另一台电脑/笔记本电脑或控制台。
现在,我使用免费软件SyncBack免费镜像文件到外部硬盘。SyncBack免费是一个不错的工具,但它似乎不能完全满足我的需求。问题是我喜欢不时地修改我的音乐视频的文件名。虽然SyncBack免费为内容相同的文件提供了一个选项,但它似乎不适用于视频,而且当您在文件名更改后同步时,每个文件夹中都会有两个副本。
所以我想写我自己的免费软件备份软件。
问题是:不使用文件名,-how可以用c#/.NET4.0识别相同的文件吗?我正在考虑为文件生成散列或校验和,而不太了解它-Is --慢到真正用于备份软件吗?
发布于 2014-08-09 06:23:06
您可以获得这样一个文件的散列
using System.Security.Cryptography;
static string GetFileHash(string filename)
{
byte[] data = File.ReadAllBytes(filename);
byte[] hash = MD5.Create().ComputeHash(data);
return Convert.ToBase64String(hash);
}MD5不是最安全的散列,但它仍然是快速的,这使得它很适合用于文件校验和。如果文件很大,ComputerHash()也需要一个Stream。
您还可能希望查看HashLib库中的一些其他检查和算法。它包含CRC和其他应该更快的算法。你可以用nuget下载它。
您还可以使用其他策略,例如,如果前x字节是相同的,则进行检查。
您可以保存一个已备份的散列数据库,这样您就不必每次运行备份时都重新计算散列。您可以只循环自上次备份时间以来已修改的文件,并查看它们的散列是否在您的哈希数据库中。如果您想要您的备份程序是可移植的,那么SQLite可以作为一个很好的数据库使用。
https://stackoverflow.com/questions/25215582
复制相似问题