我通过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 方法来打开具有长文件路径的文件?有什么技巧可以绕过这个限制吗?