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部分搞糊涂了,所以想在不模糊的情况下把那个部分拿出来。