2012-10-29 38 views
1

我正在編寫代碼以使用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."); 
    } 
} 
+0

我想我可以使用linq..but請我在哪裏可以插入代碼和如何..我是非常新的linq ..或者有另一種簡單的方法 –

+0

你是什麼意思的「分組」的文件?你試圖得到什麼輸出? –

+0

我想分組輸出eqaul文件...例如,如果有我的文件夾中有10個文件,並有2組相同的文件..我希望那些相同的文件輸出然後一個空間,然後下一組相同的文件 –

回答

3

你可以做這樣的事情:

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

你可能想關閉你打開的文件... –

+0

@TorbjörnKalin我同意。 OP似乎讓LINQ部分感到困惑,所以想把它弄到外面去而不會模糊它。 – itsme86

+0

dnt理解上面的代碼..在哪裏我把這個.... –

相關問題