Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在目录中分组相等的文件_C#_File_Directory_Equals_Linq Group - Fatal编程技术网

C# 在目录中分组相等的文件

C# 在目录中分组相等的文件,c#,file,directory,equals,linq-group,C#,File,Directory,Equals,Linq Group,我正在编写一个代码,使用hashCompute方法将给定目录中的相等文件分组。 我已经完成了大部分工作,但似乎无法对我的文件进行分组。我希望将具有相同哈希值的文件分组在一起 以下是我的代码示例: public static void myhashedfiles() { string directory; Console.WriteLine("please enter a folder name:"); directory = (Console.ReadLine());

我正在编写一个代码,使用
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.");
    }
}
publicstaticvoidmyhashedfiles()
{
字符串目录;
Console.WriteLine(“请输入文件夹名称:”);
目录=(Console.ReadLine());
if(directory.Length<1)
{
WriteLine(“输入目录或文件夹名!”);
返回;
}
DirectoryInfo dir=新的DirectoryInfo(目录);
尝试
{
FileInfo[]files=dir.GetFiles(“**”,System.IO.SearchOption.AllDirectories);
HashAlgorithm hash=HashAlgorithm.Create();
字节[]哈希值;
foreach(文件中的FileInfo fInfo)
{
FileStream FileStream=fInfo.Open(FileMode.Open);
fileStream.Position=0;
hashValue=hash.ComputeHash(fileStream);
PrintByteArray(哈希值);
Console.WriteLine(fInfo.Name);
fileStream.Close();
}
}
捕获(DirectoryNotFoundException)
{
WriteLine(“错误:找不到指定的目录。”);
}
捕获(IOException)
{
WriteLine(“错误:无法访问目录中的文件。”);
}
}

您可以这样做:

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

我想我可以使用linq..但是请问我应该在哪里插入代码以及如何插入..我对linq非常陌生..或者有其他简单的方法吗?你说的“分组”文件是什么意思?您试图获得的输出是什么?我想分组输出eqaul文件…例如,如果我的文件夹中有10个文件,并且有两组相同的文件..我想先输出这些相同的文件,然后输出一个空格,然后输出下一组相等的文件files@Torbj我同意。OP似乎被LINQ部分搞糊涂了,所以想在不模糊的情况下把那个部分拿出来。