2012-06-15 47 views
2

假設我有目錄1和目錄2,並且每個目錄都可以包含文件或子目錄。我有什麼到目前爲止,如果我想要重命名「目錄2」到「目錄3」,我可以運行:C#重命名目錄,複製全部內容如果目錄已經存在

Directory.Move("path\Directory 2", "path\Directory 3"); 

這工作得很好 - 重命名的目錄,所有子目錄和文件目錄做工精細內用新的名字,沒有副本來處理。

但是,如果我嘗試這樣做:

Directory.Move("path\Directory 2", "path\Directory 1"); 

我得到一個錯誤,因爲目錄1已經存在。在這種情況下,如果Directory 2不能被重命名爲Directory 1,那麼Directory 2中的所有內容(文件和子目錄)都應該移到Directory 1中。最簡單的方法是什麼?我應該有一個if文件存在,一個移動所有子目錄的foreach和一個移動所有文件的foreach?是否有更簡單的方法來重載.Move函數來移動文件而不管存在錯誤?

回答

3

不,因爲MOVE在文件系統級別上工作,有效地重命名文件夾,或將文件夾「指針」移動到另一個地方。前者是父目錄相同的情況,後者是父目錄不同的情況。

因此,在回答你的直接問題時,如果目標存在並且存在某些內容,則必須對每個子目錄進行foreach。如果沒有,你可以隨時刪除它並使用MOVE-ing。

看看這裏:Directory.Move doesn't work (file already exist)

+0

因此,基本上,一個很好的策略可能是做一個函數執行以下操作: 如果(文件夾不存在) - >只使用.move 如果(文件夾確實存在) - >每個子目錄運行功能 這樣我可以遞歸地重命名每個目錄和子目錄,並且如果它們已經存在,只需移動內部的東西。 是嗎? – Jake

+0

當然,看鏈接的文章,它已經有一個:) –

+0

嘿,這很容易!謝謝! – Jake

0

我會做這種方式:

if(Directory.Exists(destinationPath)) 
{ 
    Directory.Delete(destionatPath, true /* recusively nuke everything */); 
} 

Directory.Move(sourcePath, destinationPath); 
+0

我寧願不刪除現有的路徑,只是將文件添加到它 – Jake

+0

那將是一個完全不同的東西,然後。 – bluevector

0

您不能使用Directory.Move方法將文件移動到一個現有的文件夾中。例如,在這種情況下,您必須使用文件級別的foreach循環手動移動文件。只有目標目錄不能退出時,Directory.Move纔有效。但是,您可以檢查目錄是否已經存在,或者嘗試它並處理IOException異常,以便只在必要時才執行foreach。