win32 api (DllImport of kernel32)를 통해 FileFinderEx
을 통해 재귀를 통해 파일 List<string>
을 얻습니다. 이것이 어떻게 수행되는지에 대한 몇 가지 질문이 있습니다.매우 긴 파일 경로를 가진 파일의 경우 C# SHA256
\\?\UNC\
및 \\?\
을 사용하여 MAX_PATH
보다 큰 정규화 된 경로를 처리합니다.
또한 win32 api에서 GetShortPathNameW
을 통해 파일의 "짧은 경로"(8.3 이름)를 가져올 수 있습니다.
파일에 대한 정규화 된 경로가 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();
}
}
내가 직면 문제 내가 완전한 UNC 이름을 MAX_PATH
보다 큰 경우는 "짧은 경로"(8.3 명)에 File.OpenRead
항상 예외가 발생합니다 줄 경우에도 ((260) 나는 믿는다).
그래서 ... 지금은 무엇입니까? File.OpenRead
대신에 읽을 수있는 몇 가지 win32 API 함수가 있습니까? 아니면 긴 파일 경로로 파일을 여는 다른 .NET 메서드가 있습니까? 이 제한을 극복하는 데 도움이되는 팁이 있습니까?
감사합니다. 오해의 소지가있는 이름으로 인해 이전에 이것을 찾지 않았습니다! – user17753