我正在尝试哈希视频文件以获取重复列表。 我在这里看了here和here,这是我获得一些代码的地方。但由于某种原因,我的方法在这一行中断了。
byte[] hash = md5.ComputeHash(fs);
我尝试过更改方法,手动进行垃圾收集,用 HashAlgorithm.ComputeHash()替换 md5.ComputeHash(),但没有运气。这是我的代码:
主类代码
Console.WriteLine("Please enter a directory path :");
string path = Console.ReadLine();
loadFiles load = new loadFiles(path, "video");
videoFiles video = new videoFiles(path);
video.removeDuplicates(load.files);
Console.WriteLine("Done");
将文件加载到数组中的类
private List<string> videoExt = new List<string>() { ".mp4", ".avi", ".mkv", ".srt", ".t" };
private string filetype;
public loadFiles(string path, string filetype)
{
this.path = path;
this.filetype = filetype;
getFiles();
getDirectories();
}
public FileInfo[] getFiles()
{
DirectoryInfo d = new DirectoryInfo(path);
if (filetype == "audio")
{
files = d.GetFiles("*", SearchOption.AllDirectories).Where(x => audioExt.Contains(x.Extension)).ToArray();
}
else if (filetype == "video")
{
files = d.GetFiles("*", SearchOption.AllDirectories).Where(x => videoExt.Contains(x.Extension)).ToArray();
}
return files;
}
搜索重复项并将其添加到列表
的方法 public void removeDuplicates(FileInfo[] files)
{
List<byte[]> hashes = new List<byte[]>();
List<string> duplicates = new List<string>();
foreach (FileInfo file in files)
{
using (FileStream fs = file.OpenRead())
{
using (MD5 md5 = MD5.Create())
{
byte[] hash = md5.ComputeHash(fs);
if (hashes.Contains(hash))
duplicates.Add(file.FullName);
else
hashes.Add(hash);
}
}
}