2010-10-27 3 views
10

У меня есть коллекция файлов с полным набором путей (root/test/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 namespace (Directory, Path), я думаю, что они помогут вам

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

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); 
Смежные вопросы