我有一个带有音乐视频的文件夹,我想从笔记本电脑备份到外部硬盘。我不想使用备份 - 图像,而是直接文件复制,这样我就可以直接在另一台计算机/笔记本电脑或控制台上观看来自备份硬盘的音乐视频。
我可以使用免费软件SyncBack Free将文件镜像到外部硬盘。 SyncBack Free是一个很好的工具,但它似乎并不能完全满足我的需求。问题是我喜欢不时修改我的音乐视频的文件名。虽然SyncBack Free可以选择具有相同内容的文件,但它似乎不适用于视频,并且在文件名更改后同步时,每个文件夹中的同一文件最终会有两个副本。
因此我正在考虑编写自己的免费软件备份软件。
问题是: - 如何使用c#/ .Net 4.0识别相同的文件而不使用文件名?我想为文件生成哈希值或校验和而不太了解它 - 真的用于备份软件会慢吗?
答案 0 :(得分:2)
你可以得到像这样的文件的哈希
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会成为一个很好的数据库。