[英]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.