0

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

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

0 回答 0