2009-01-16 37 views
6

如何創建具有文件長度的副本文件的副本超過260個字符,包括使用vb.net如何創建具有長度超過260個字符

當我們試圖創建副本文件名使用File.Copy方法會引發異常,如下所示:

「指定的路徑,文件名或這兩者太長。完全限定的文件名必須少於260個字符,且目錄名稱必須小於248字符「。

是否有可能,那麼請幫助...

回答

2

有縮短名稱的提示...看到標題爲「原因4:文件位於比MAX_PATH字符更深的路徑中」在http://support.microsoft.com/?kbid=320081#

+0

它的Windows限制。如果FilePath超過260個字符,大部分文件操作都會拋出類似的錯誤。即使文件重命名也會有問題,我認爲 – Gishu 2009-01-16 06:33:40

9

您正在運行MAX_PATH限制。作爲一項解決方案,您應該能夠直接P/Invoke到kernel32.dll的CopyFile函數,並在目標路徑前使用「\\?\」前綴來防止遇到MAX_PATH問題。

請注意,儘管您可以以大多數應用程序無法打開的方式複製文件,但它們也受到MAX_PATH的限制。

問題的很好的概述可以在這裏找到:http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

P的一些示例代碼/調用到使用C#這些方法可在第2部分,在這裏找到:http://blogs.msdn.com/bclteam/archive/2007/03/26/long-paths-in-net-part-2-of-3-long-path-workarounds-kim-hamilton.aspx

該schnaader庫linked看起來像它會爲你節省P/Invoking到kernel32.dll的問題,不知道你是否想要依賴於外部DLL。

0

我最常做在這種情況下是:

1)計數的文件名length

2)如果FileNameLength > 259然後再剪裁的文件名,足以應付新的名稱,然後將該文件與副本裁剪的目的地名稱。

1

我得到了關於這個問題的解決方案。

對R & D我發現我們可以重命名指定的路徑目錄,即使總長度超過260個字符,然後我們可以將文件從指定位置複製到新(臨時)位置以供我們掃描。最後,我們可以重新命名文件路徑名稱與原來的一個。

0

jdelimon已經指出了Delimon.Win32.IO庫,但他們上次更新的是2012(.Net 2.0)。這裏是另一個庫:AlphaFS

他們去。淨4.5.2(在29/6/2017)。我使用了一個非常短的#C程序作爲Excel的COM加載項。見this link in how to create a programthis link for the copy-program。您只需將程序分配給.NET 4.5,將對4的AlphaFS.dll的引用添加。5並將using System.IO替換爲using Alphaleonis.Win32.Filesystem;

相關問題