如何为长文件路径调用Win32 API,我唯一想做的就是获取该目录中所有文件的列表(recursivly)
答案 0 :(得分:1)
如果你想使用Win32调用,你首先必须使用DllImport来导入内核,语法就像这样,你必须为你想要使用的每个方法执行此操作(这是所有未经测试的伪 - 代码示例只描述了这个概念,代码示例将您的路径转换为UNC路径,以便您可以拥有长文件路径:
using Microsoft.Win32.SafeHandles;
...
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern SafeHandleMinusOneIsInvalid FindFirstFileW(string lpFileName, IntPtr lpFindFileData);
...
public String FindFirstFile(string filepath)
{
// If file path is disk file path then prepend it with \\?\
// if file path is UNC prepend it with \\?\UNC\ and remove \\ prefix in unc path.
if (filepath.StartsWith(@"\\"))
filepath = @"\\?\UNC\" + filepath.Substring(2, filepath.Length - 2);
else
filepath = @"\\?\" + filepath;
...
SafeHandleMinusOneIsInvalid ret = FindFirstFileW(filepath, lpFindFileData);
...
}
调用FindFirstFile后,必须为目录中的下一个文件调用FindNextFile,最后调用FindClose;有关如何使用Win32内核列出目录中文件的完整示例,请查看here