c#为长文件路径调用Win32 API?

时间:2009-08-08 12:56:25

标签: c#

如何为长文件路径调用Win32 API,我唯一想做的就是获取该目录中所有文件的列表(recursivly)

1 个答案:

答案 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

相关问题