c#散列多个文件

问题描述

我遇到了一些代码问题,我想用它来散列多个文件。我在visual studio中使用wpf,代码如下:

    public string checkMD5(string filename)
    {
        string output;

        using (var md5 = MD5.Create())
        {
            using (var stream = File.OpenRead(filename))
            {
                byte[] hash = md5.ComputeHash(stream);
                StringBuilder sb = new StringBuilder(hash.Length);

                foreach (byte b in hash)
                {
                    sb.AppendFormat("{0:X2}",b);
                }
                output = filename + " MD5 Hash = " + sb.ToString();
            }
        }

        return output;

    }

问题是,它以以下形式提供了多个文件名的列表 C://file1 C://file2 C://file3

代码执行 1 个文件名就好了。如何通过此文件名列表进行上述循环?非常感谢任何帮助..我已经在这两天了:(

解决方法

您可以使用 String.Split() 来拆分它们,然后循环遍历每个:

string[] individualFileNames = filename.Split(' ');
foreach(string individualFileName in individualFileNames)
{
   // open and process file individualFileName here
}
,

您需要一个包含文件名的字符串数组,然后有一个简单的 forforeach 循环:

for (int i = 0; i < fileNameArray.Length; i++)
{
    string output = checkMD5(fileNameArray[i]);
}

or

foreach (string fileName in fileNameArray)
{
    string output = checkMD5(fileName);
}

要从目录中获取文件名数组,您可以使用函数 Directory.GetFiles

考虑到您说函数是 being fed a list of multiple filenames in the form of C://file1 C://file2 C://file3 我将假设文件名在单个字符串中,如果是这种情况,您将不得不想办法将其拆分为文件数组名称,然后将每个名称传递给上述函数,为此您可以尝试使用 String.Split 像这样:

string fileNames = "C://file1 C://file2 C://file3";

string[] fileNameArray = fileNames.Split(' ');

//fileNameArray[0] > C://file1

//fileNameArray[1] > C://file2

//fileNameArray[2] > C://file3

foreach (...)

请记住,如果任何文件名的路径中有空格,那么这将不起作用,例如:

string fileNames = "C://Some Files//file1 C://file2 C://file3";

string[] fileNameArray = fileNames.Split(' ');

//fileNameArray[0] > C://Some

//fileNameArray[1] > Files//file1

//fileNameArray[2] > C://file2

//fileNameArray[3] > C://file3

在此示例中,C://Some Files//file1 将被拆分为 2,因为路径在目录名称 Some Files 中有一个空格。

我建议只使用 Directory.GetFiles 来获取文件名列表,而不是其他任何东西。