2016-03-12 74 views
0

當我保存文件或者通過提供它提供了一個錯誤「指定的路徑,文件名的路徑創建使用system.io目錄或兩者都是太長。完全合格的域名必須是260個字符和目錄名必須有我240個字符得到錯誤指定的路徑,文件名或者兩者都太長

1)。我試過了Delimon庫,但它仍然給出了同樣的錯誤。 2)。我曾嘗試添加\?\前綴,但導致非法字符。 3)。我也曾嘗試://在文件名的開始,但它導致URI不支持錯誤

現在我的問題是:

1)。是否有可能使用System.IO庫的長路徑? 2)。如果你是由Delimon庫提供解決方案,那麼請告訴我可以在我的共享軟件中使用這個庫嗎?

在此先感謝...

+0

的名稱是什麼,或者你要保存的文件的路徑? – SeM

+0

我的文件名的路徑超過了260個字符。 –

+0

請儘快告訴我們如何處理這個問題。我不想使用任何第三方API –

回答

0

的基本問題是,.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個字符的限制。試試看看。

相關問題