У меня есть набор файлов с полностью определенными путями (root/test/thing1/thing2/file.txt). Я хочу foreach
по этой коллекции и отбросить файл в место, определенное в пути, однако, если некоторые каталоги не существуют, я хочу, чтобы они были созданы автоматически. Моя программа имеет по умолчанию "местоположение перехода", например z:/
. "Место падения" начинается пустым, поэтому в моем примере выше первый элемент должен автоматически создавать каталоги, необходимые для создания z:/root/test/thing1/thing2/file.txt
. Как я могу это сделать?
Автоматически создавать каталоги с длинных путей
Ответ 1
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>
.
Ответ 2
string somepath = @"z:/root/test/thing1/thing2/file.txt";
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName( ( somepath ) );
Ответ 3
Directory.CreateDirectory("/root/...")
Создает все каталоги и подкаталоги по указанному пути
Ответ 4
Отметьте пространство имен IO (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);
Ответ 5
string filename = "c:\\temp\\wibble\\wobble\\file.txt";
string dir = Path.GetDirectoryName(filename);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
File.Create(filename);
с подходящей обработкой исключений, конечно.
Ответ 6
Я обнаружил, что установка "местоположение по умолчанию" в начале выполнения является полезной и уменьшает бит избыточного кода (например, Path.Combine(defaultLocation, relativePath)
).
Пример:
var defaultLocation = "z:/";
Directory.SetCurrentDirectory(defaultLocation);
Directory.SetCurrentDirectory(AppContext.BaseDirectory);