2010-03-03 43 views
1

後來我問了一個關於刪除具有長路徑(> 260個字符)的文件夾的stackoverflow問題,最流行的解決方案是移動到每個目錄以減少長度的路徑。我一直在努力,我不再繼續,有人可以建議我如何將建議的代碼整合到我的代碼中嗎?C#幫助需要更改刪除具有長路徑的文件夾的代碼

的典型路徑是:

\\服務器\共享\戴夫\私人\招聘\招聘埃德\玩轉職業教育\克里斯的未使用2006年TO07 \老4.Careers區活動周1零六年十月三十零日或06年11月6日或06年11月13日介紹的工作水平和職業資源\職業領域&工作水平導師的幫助頁[1]的.doc

非常感謝

//推薦碼:

var curDir = Directory.GetCurrentDirectory(); 
Environment.CurrentDirectory = @"C:\Part\Of\The\Really\Long\Path"; 
Directory.Delete("Relative\Path\To\Directory"); 
Environment.CurrentDirectory = curDir; 

//我的代碼:

try 
{ 
    var dir = new DirectoryInfo(@FolderPath); 
    dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly; 
    dir.Delete(); 
} 
catch (IOException ex) 
{ 
    MessageBox.Show(ex.Message,"Delete Error",MessageBoxButtons.OK,MessageBoxIcon.Error); 
} 

回答

1

之前「刪除目錄」我們必須確保它是空的。你可以考慮使用反向的「目錄走」方法。

這將需要分別處理每個目錄以從深到淺的順序。

一些僞代碼;

 
While (fullPath.Length > 0) 
{ 
    DirectoryToDelete = GetLastPartOfPath(fullPath); 
    CurrentDirectory = fullPath - DirectoryToDelete; 

    ChangeDirectory(CurrentDirectory); 
    DeleteDirectory(DirectoryToDelete); 

    fullPath = fullPath - DirectoryToDelete; 
} 

希望這有助於

1

您是否嘗試過使用長路徑名語法? 從CreateFile函數在平臺SDK:

最大路徑長度在Windows API (有一些例外討論 後),對於路徑 是MAX_PATH,其被定義爲260個 字符的最大長度。本地路徑按以下順序組織爲 :驅動器號, 冒號,反斜槓,由反斜槓分隔的組件 以及終止空字符 。例如,驅動器D上的最大路徑爲「D:\ chars> NUL」。

在Windows API有很多功能 也具有Unicode的版本 允許的成分構成 大約32,000個字符 一個最大路徑長度的長度可達255個每個字符 。要指定 那種擴展長度的路徑,請使用 的「\?\」前綴。例如, 「\?\ D:\」。

注32000個 字符的最大路徑是近似的,因爲 「\?\」前綴,可以擴展到 更長的字符串,並擴大 適用於總長度。

要使用UNC指定這樣的路徑,請使用「\?\ UNC \」前綴 。例如, 「\?\ UNC \\」。這些 前綴不會用作 路徑本身的一部分。他們指示 路徑應該傳遞到系統 進行最小的修改,這意味着 您不能使用正斜槓到 代表路徑分隔符或 代表當前目錄。 此外,您不能使用帶有相對路徑的「\?\」前綴 。相對路徑 僅限於MAX_PATH字符。

最後一段當然是與你的情況相關的段落。

.NET不支持這種路徑。您可以使用P/Invoke從Win32 SDK中調用RemoveDirectory。

1

使用ZetaLongPaths。它處理長路徑。 Google ZetaLongPaths