的基本問題是,.NET框架明確不允許使用長文件名,並且將積極努力阻止你使用它們。直接使用Win32 API調用來創建和寫入文件,您將無法簡單地使用長路徑。
根據路徑的性質,您可以將其縮小到更短的長度。任何不符合8.3格式的文件或文件夾名稱都會有縮短的版本。您可以使用GetShortPathName
API來確定是否存在符合標準限制的路徑的簡短形式。
例子:
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetShortPathNameW", SetLastError = true)]
static extern int GetShortPathName(string pathName, System.Text.StringBuilder shortName, int cbShortName);
static void Main()
{
StringBuilder sb = new StringBuilder(300);
int res = GetShortPathName(
@"C:\Program Files (x86)\GitHub Extension for Visual Studio\GitHub.VisualStudio.vsix",
sb,
300
);
Console.WriteLine(sb.ToString());
}
上面打印:
C:\PROGRA~2\GITHUB~1\GITHUB~1.VSI
這將僅適用於存在,但可以用來至少縮短文件夾名稱,以最短級文件。對於可能足以讓您直接訪問文件的臨界情況。
如果沒有,那麼你需要看看某種解決方法。
可能最簡單的方法是使用簡短的初始保存路徑,然後直接調用Win32 API以將文件移動到最終位置,並提供全長路徑支持和全部。
您也可以嘗試在該的NuGet模塊Pri.LongPath
。它可以讓你使用長文件名,包括移動等工作,但我不認爲它使您能夠讀/寫這些文件時,他們得到超過260個字符的限制。試試看看。
的名稱是什麼,或者你要保存的文件的路徑? – SeM
我的文件名的路徑超過了260個字符。 –
請儘快告訴我們如何處理這個問題。我不想使用任何第三方API –