[英]c# call Win32 API for long file paths?
我将如何为长文件路径调用Win32 API,我唯一要做的就是获取该目录中所有文件的列表(递归)
如果要使用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内核列出目录中文件的完整示例,请参见此处
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.