Вопрос

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

Это было полезно?

Решение

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>.

Другие советы

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

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

Проверить Пространство имен IO (Каталог, Дорожка), Я думаю, что они помогут вам

using System.IO

Затем проверьте это ..

string fileName =@"d:/root/test/thing1/thing2/file.txt"; 
string directory = Path.GetDirectoryName(fileName);
if (!Directory.Exists(directory))
    Directory.CreateDirectory(directory);
string filename = "c:\\temp\\wibble\\wobble\\file.txt";
string dir = Path.GetDirectoryName(filename);
if (!Directory.Exists(dir))
{
    Directory.CreateDirectory(dir);
}
File.Create(filename);

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

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

Пример:

var defaultLocation = "z:/";
Directory.SetCurrentDirectory(defaultLocation);
Directory.SetCurrentDirectory(AppContext.BaseDirectory);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top