Автоматически создавать каталоги из длинных путей - PullRequest
11 голосов
/ 27 октября 2010

У меня есть коллекция файлов с полностью определенными путями (root / test / thing1 / thing2 / file.txt).Я хочу foreach над этой коллекцией и перетащить файл в местоположение, определенное в пути, однако, если некоторые каталоги не существуют, я хочу, чтобы они были созданы автоматически.У моей программы по умолчанию есть «место размещения», такое как z:/.«Место размещения» начинается пустым, поэтому в моем примере выше первый элемент должен автоматически создавать каталоги, необходимые для создания z:/root/test/thing1/thing2/file.txt.Как я могу это сделать?

Ответы [ 6 ]

18 голосов
/ 27 октября 2010
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>.

13 голосов
/ 27 октября 2010
string somepath = @"z:/root/test/thing1/thing2/file.txt";
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName( ( somepath ) );
7 голосов
/ 27 октября 2010
Directory.CreateDirectory("/root/...") 

Создает все каталоги и подкаталоги по указанному пути

4 голосов
/ 27 октября 2010

Check IO namespace ( Directory , Path ), я думаю, они помогут вам

using System.IO

Тогда проверь это ..

string fileName =@"d:/root/test/thing1/thing2/file.txt"; 
string directory = Path.GetDirectoryName(fileName);
if (!Directory.Exists(directory))
    Directory.CreateDirectory(directory);
1 голос
/ 27 октября 2010
string filename = "c:\\temp\\wibble\\wobble\\file.txt";
string dir = Path.GetDirectoryName(filename);
if (!Directory.Exists(dir))
{
    Directory.CreateDirectory(dir);
}
File.Create(filename);

с подходящей обработкой исключений, конечно.

0 голосов
/ 30 июня 2017

Я обнаружил, что установка «местоположения по умолчанию» в начале выполнения может быть полезной и уменьшить немного избыточного кода (например, Path.Combine(defaultLocation, relativePath)).

Пример:

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