组在目录中等于文件



我正在使用hashCompute方法在给定目录中编写一个代码。我已经完成了大部分工作,但似乎无法对文件进行分组。我希望将相同哈希值的文件分组在一起。

这是我的代码的示例:

public static void myhashedfiles()
{
    string directory;
    Console.WriteLine("please enter a folder name:");
    directory = (Console.ReadLine());
    if (directory.Length < 1)
    {
        Console.WriteLine("enter a directory or folder name!");
        return;
    }
    DirectoryInfo dir = new DirectoryInfo(directory);
    try
    {
        FileInfo[] files = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
        HashAlgorithm hash = HashAlgorithm.Create();
        byte[] hashValue;
        foreach (FileInfo fInfo in files)
        {
            FileStream fileStream = fInfo.Open(FileMode.Open);
            fileStream.Position = 0;
            hashValue = hash.ComputeHash(fileStream);
            PrintByteArray(hashValue);
            Console.WriteLine(fInfo.Name);
            fileStream.Close();
        }
    }
    catch (DirectoryNotFoundException)
    {
        Console.WriteLine("Error: The directory specified could not be found.");
    }
    catch (IOException)
    {
        Console.WriteLine("Error: A file in the directory could not be accessed.");
    }
}

您可以做这样的事情:

var groups = files
    .Select(file => new {
        fInfo = file,
        Hash = hash.ComputeHash(file.Open(FileMode.Open)) }
    ).GroupBy(item => item.Hash);
foreach (var grouping in groups)
{
    Console.WriteLine("Files with hash value: {0}", grouping.Key);
    foreach(var item in grouping)
        Console.WriteLine(item.fInfo);
}

相关内容

  • 没有找到相关文章

最新更新