簡體   English   中英

C#調用Win32 API的長文件路徑?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM