【问题标题】:group equal files in a directory将相同的文件分组到一个目录中
【发布时间】:2012-10-29 18:58:02
【问题描述】:

我正在编写代码,使用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.");
    }
}

【问题讨论】:

  • 我想我可以使用 linq..但是请我在哪里插入代码以及如何..我对 linq 很陌生..或者还有其他简单的方法
  • “分组”文件是什么意思?你想得到什么输出?
  • 我想按组输出 eqaul 文件...例如,如果我的文件夹中有 10 个文件并且有 2 组相同的文件..我希望输出这些相同的文件,然后输出一个空格,然后下一组相等的文件

标签: c# file directory equals linq-group


【解决方案1】:

你可以这样做:

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

【讨论】:

  • @TorbjörnKalin 我同意。 OP 似乎被 LINQ 部分弄糊涂了,所以想把那部分拿出来而不掩盖它。
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2016-11-09
  • 2019-03-03
  • 2013-03-11
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多