2016-12-14 59 views
3

我想創建這樣一個簡單的目錄樹,雖然它並不需要具有相同的名稱我可以在同一時間創建2個子目錄C#嗎?

Directory Tree

我是否需要寫這樣的:

Directory.CreateDirectory("/home/XXX/Documents/Users/Pepe/datos/"); 
Directory.CreateDirectory("/home/XXX/Documents/Users/Juan"); 

有沒有在同一個字符串路徑中創建「Pepe」和「Juan」的選項?

+6

不是。但是,您擁有它的方式有什麼問題? –

+0

每次需要創建目錄時,您都必須使用CreateDirectory方法。它不是過度設計的,這有什麼問題? – LONG

+0

如果這樣做不方便,則創建一個靜態方法,將一組目錄作爲一個字符串接受,並將其作爲一種便利方法使用。即。 'public static void CreateDirs(params string [] dirPaths){/ *循環數組並創建目錄* /}' – Igor

回答

2

不,沒有什麼可以燒製BCL來做到這一點;你必須給每個人打電話CreateDirectory

如果你的目錄路徑集合,你可以把一個循環中:

foreach (string dirPath in directoryPaths) 
{ 
    Directory.CreateDirectory(dirPath); 
} 
4

要發佈一個答案,並提供替代方案,如果你只是想有CreateDirectory方法的一個用法,然後你可以有一個方法,該方法使用參數params string[],並在調用方法時傳入目錄。

的代碼看起來像這樣

private static void CreateDirectories(params string[] directories) 
{ 
    foreach (string directory in directories) 
    { 
     Directory.CreateDirectory(directory); 
    } 
} 

您可以

CreateDirectories("/home/XXX/Documents/Users/Pepe/datos/", "/home/XXX/Documents/Users/Juan"); 

打電話,或者你可以在一個字符串數組傳遞

CreateDirectories(new [] { "/home/XXX/Documents/Users/Pepe/datos/", "/home/XXX/Documents/Users/Juan"}); 

我降低的使用System.IO方法做上述,然後我接口的類允許我創建嘲笑,然後ü nit測試我創建的軟件,而不執行I/O操作,這會帶來一種場景,您可以使用上述場景,除非它不是靜態的。

1

這聽起來像你有一個共同的根目錄:

/home/XXX/Documents/Users 

,你想從那裏添加子目錄。如果是這樣的話,如果我們的目標是隻需要引用子目錄,然後我會@ ColinM的辦法去,但如下略有修改:

private static void CreateDirectories(string directoryRoot, params string[] directories) 
{ 
    foreach (string directory in directories) 
    { 
     Directory.CreateDirectory(Path.Combine(directoryRoot, directory)); 
    } 
} 

現在,當你調用它,你只需要提根一次

CreateDirectories("/home/XXX/Documents/Users", "Pepe/datos/", "Juan"); 

的好處約Path.Combine是,你不必擔心有一個斜線/即無論是在directoryRoot尾隨或領導在任何directories --IT的將確保最終格式正確。當然,如果你採用這種方法,你需要決定如果directories爲空會發生什麼 - 你是否創建了directoryRoot(假設它還沒有),你會拋出一個錯誤還是做你只是回來?

0

你可以創建like。

System.IO.Directory。CreateDirectory( 「C:/方向1 /方向2/DIR3」);

認爲在c:盤根處沒有Dir1。

它會像Dir1 - > Dir2 - > Dir3一樣創建文件夾結構。

如果Die1在那裏,那麼它將創建其餘的子目錄。

相同的多個級別。

相關問題