我通过win32 api(kernel32的DllImport)List<string>递归获得了一个文件。FileFinderEx(有几个问题可以解决这个问题)。
我处理的完全限定路径大于MAX_PATH使用\\?\UNC\and \\?\。
此外,从 win32 api 我可以通过GetShortPathNameW.
现在我有了List<string>文件的完全限定路径,我想遍历每个路径并将它们SHA256放入另一个列表(相同的索引)。粗略地说,是这样的:
List<string> files = new List<string>();
//win api function populates files ...
List<string> hash = new List<string>();
for (int i = 0; i < files.Count; i++)
{
using (var stream = new BufferedStream(File.OpenRead(files[i]), 1200000))
{
SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
hash.Add(BitConverter.ToString(checksum).Replace("-", String.Empty));
stream.Close();
}
}
我面临的问题是,即使我给它“短路径”(8.3 名称),File.OpenRead如果完全限定的 UNC 名称大于MAX_PATH(我相信是 260),总是会抛出异常。
那么现在怎么办?我可以导入一些win32 api函数来代替阅读File.OpenRead吗?或者是否有其他一些 .NET 方法来打开具有长文件路径的文件?有什么技巧可以绕过这个限制吗?