首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用.Net在两个文件夹中找到相同的文件

用.Net在两个文件夹中找到相同的文件
EN

Stack Overflow用户
提问于 2014-08-09 05:42:43
回答 1查看 106关注 0票数 1

我有一个文件夹与音乐视频,我想备份从我的笔记本电脑到外部硬盘。我不想使用备份-图像,但直接文件副本,以便我可以直接观看音乐视频从备份硬盘上的另一台电脑/笔记本电脑或控制台。

现在,我使用免费软件SyncBack免费镜像文件到外部硬盘。SyncBack免费是一个不错的工具,但它似乎不能完全满足我的需求。问题是我喜欢不时地修改我的音乐视频的文件名。虽然SyncBack免费为内容相同的文件提供了一个选项,但它似乎不适用于视频,而且当您在文件名更改后同步时,每个文件夹中都会有两个副本。

所以我想写我自己的免费软件备份软件。

问题是:不使用文件名,-how可以用c#/.NET4.0识别相同的文件吗?我正在考虑为文件生成散列或校验和,而不太了解它-Is --慢到真正用于备份软件吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-09 06:23:06

您可以获得这样一个文件的散列

代码语言:javascript
复制
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可以作为一个很好的数据库使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25215582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档