md5.ComputeHash()中断而不会抛出错误

时间:2017-09-29 11:15:21

标签: c# hash md5 hashalgorithm

我正在尝试哈希视频文件以获取重复列表。 我在这里看了herehere,这是我获得一些代码的地方。但由于某种原因,我的方法在这一行中断了。

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);
                }
            }
        }

0 个答案:

没有答案