我已浏览过上一篇文章,找不到解答此问题的文章。如果可能的话,请你指点我正确的方向。在2d字符串数组中查找重复的字符串
我正在使用MD5制作C#WPF文件重复查找程序,我将文件名和MD5哈希存储在二维数组中,这是最快的方式,我认为我可以实现这一点,但我有一个这个问题。
下面的代码是什么我试图做的事:
public void fileList(string filename)
{
string[,] fileLocationHash;
string[] files = Directory.GetFiles(filename, "*.*",
SearchOption.AllDirectories);
for (int i = 0; i < files.Length; i++)
{
FileStream file = new FileStream(files[i], FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int x = 0; x < retVal.Length; x++)
{
sb.Append(retVal[x].ToString("x2"));
}
string fileHash = sb.ToString();
// 2D array to compare hash and find duplicates
fileLocationHash = new string[,]
{
{files[i], fileHash}
};
resultTextbox.Text = resultTextbox.Text
.Insert(resultTextbox.CaretIndex, fileHash + Environment.NewLine);
resultTextbox.Text = resultTextbox.Text
.Insert(resultTextbox.CaretIndex, files[i] + " - ");
}
}
我有实施的循环要经过二维数组的fileHash部分,并找到重复的问题。我不能看作是能够弄清楚如何选择阵列的第二部分,我认为以下将工作:
var duplicates = fileLocationHash[]
.GroupBy(g => g).Where(w => w.Count() > 1).Select(s => s.Key);
foreach (var d in duplicates);
但是这显示了fileLocationHash[]
一个错误,我似乎无法理解我将如何保存和找到找到的文件的索引,这些文件将从2D数组的其他部分打印出文件的名称。
边注:请使用自定义类,甚至'KeyValuePair <字符串,字符串>'使你的代码更易读... –
你永远只能存储一个值在二维数组,究竟是什么你想在这里做什么? –
我正在将文件名存储在一个部分中,并将md5哈希值存储在第二部分中。我试图循环遍历第二部分,找到重复的部分,然后我将显示数组第一部分的文件名的重复项。试图找到具有md5值的重复文件。 – MacKey