2010-10-27 62 views
10

我所擁有的文件與完全合格的路徑(根/測試/ thing1/thing2/file.txt的)的集合創建目錄。我想foreach在此集合和文件拖放到路徑定義的位置,但是,如果沒有某些目錄,我希望他們能夠極大自動創建。我的程序有一個默認的「放置位置」,例如z:/。 「放置位置」開始爲空,因此在上面的示例中,第一項應自動創建創建z:/root/test/thing1/thing2/file.txt所需的目錄。我怎樣才能做到這一點?自動從長路徑

回答

16
foreach (var relativePath in files.Keys) 
{ 
    var fullPath = Path.Combine(defaultLocation, relativePath); 
    var directory = Path.GetDirectoryName(fullPath); 

    Directory.CreateDirectory(directory); 

    saveFile(fullPath, files[relativePath]); 
} 

其中的文件是IDictionary<string, object>

10
string somepath = @"z:/root/test/thing1/thing2/file.txt"; 
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName((somepath)); 
3

檢查IO namespaceDirectoryPath),我想他們會幫你

using System.IO 

然後檢查它..

string fileName [email protected]"d:/root/test/thing1/thing2/file.txt"; 
string directory = Path.GetDirectoryName(fileName); 
if (!Directory.Exists(directory)) 
    Directory.CreateDirectory(directory); 
7
Directory.CreateDirectory("/root/...") 

創建中的所有目錄和子目錄指定路徑

+0

同意,沒有必要檢查是否存在目錄因爲它這個內部。 – Squirrel 2010-10-27 20:14:51

1
string filename = "c:\\temp\\wibble\\wobble\\file.txt"; 
string dir = Path.GetDirectoryName(filename); 
if (!Directory.Exists(dir)) 
{ 
    Directory.CreateDirectory(dir); 
} 
File.Create(filename); 

當然,有合適的異常處理。

0

我發現在執行開始時設置「默認位置」有助於減少一些冗餘代碼(例如,Path.Combine(defaultLocation, relativePath))。

例子:

var defaultLocation = "z:/"; 
Directory.SetCurrentDirectory(defaultLocation); 
Directory.SetCurrentDirectory(AppContext.BaseDirectory);