Как создать файл и любые папки, если папки не существуют?
представьте, что я хочу создать (или перезаписать) следующий файл :- C:TempBarFooTest.txt
С помощью .Создавать.(.) метод, это может сделать это.
но, если у меня нет ни одной из следующих папок (из этого примера путь, выше)
- Temp
- бар
- Фу
после DirectoryNotFoundException бросили.
Так .. дан путь, как мы можем рекурсивно создайте все папки, необходимые для создания файла .. для этого пути? если папки Temp или Bar существуют, но Foo этого не делает... тогда и это создается.
для простоты предположим, что нет проблем с безопасностью - все разрешения в порядке и т. д.
9 ответов:
DirectoryInfo di = Directory.CreateDirectory(path); Console.WriteLine("The directory was created successfully at {0}.", Directory.GetCreationTime(path));посмотреть эта страница MSDN.
надеюсь, что поможет!
чтобы суммировать то, что было прокомментировано в других ответах:
//path = @"C:\Temp\Bar\Foo\Test.txt"; Directory.CreateDirectory(Path.GetDirectoryName(path));
Directory.CreateDirectoryсоздаст каталоги рекурсивно, и если каталог уже существует, он вернется без ошибки.если там оказался файл
FooatC:\Temp\Bar\Fooбудет выдано исключение.
. учитывая путь, как мы можем рекурсивно создать все папки, необходимые для создания файла .. для этого пути
создает все каталоги и подкаталоги, как указано в path.
Directory.CreateDirectory(path);затем вы можете создать файл.
вам нужно будет проверить обе части пути (каталог и имя файла) и создать каждый, если он не существует.
использовать
File.ExistsиDirectory.Existsчтобы выяснить, существуют ли они.Directory.CreateDirectoryсоздаст весь путь для вас, так что вам нужно только один раз позвонить, если каталог не существует, а затем просто создать файл.
Я знаю, что есть некоторые другие ответы здесь, но ни один из них не является достаточно полной, следующий код создать каталоги (если не существует) и затем копировать файлы.
// using System.IO; // for ex. if you want to copy files from D:\A\ to D:\B\ foreach (var f in Directory.GetFiles(@"D:\A\", "*.*", SearchOption.AllDirectories)) { var fi = new FileInfo(f); var di = new DirectoryInfo(fi.DirectoryName); // you can filter files here if (fi.Name.Contains("FILTER") { if (!Directory.Exists(di.FullName.Replace("A", "B")) { Directory.CreateDirectory(di.FullName.Replace("A", "B")); File.Copy(fi.FullName, fi.FullName.Replace("A", "B")); } } }
вы хотите каталог.CreateDirectory()
вот класс, который я использую (преобразованный в C#) , что если вы передадите ему исходный каталог и пункт назначения, он скопирует все файлы и подпапки этого каталога в пункт назначения:
using System.IO; public class copyTemplateFiles { public static bool Copy(string Source, string destination) { try { string[] Files = null; if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) { destination += Path.DirectorySeparatorChar; } if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } Files = Directory.GetFileSystemEntries(Source); foreach (string Element in Files) { // Sub directories if (Directory.Exists(Element)) { copyDirectory(Element, destination + Path.GetFileName(Element)); } else { // Files in directory File.Copy(Element, destination + Path.GetFileName(Element), true); } } } catch (Exception ex) { return false; } return true; } private static void copyDirectory(string Source, string destination) { string[] Files = null; if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) { destination += Path.DirectorySeparatorChar; } if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } Files = Directory.GetFileSystemEntries(Source); foreach (string Element in Files) { // Sub directories if (Directory.Exists(Element)) { copyDirectory(Element, destination + Path.GetFileName(Element)); } else { // Files in directory File.Copy(Element, destination + Path.GetFileName(Element), true); } } }}
предполагая, что ваша сборка / exe имеет FileIO разрешение само по себе, ну не правильно. Приложение может не работать с правами администратора. Его важно учитывать Безопасность Доступа К Коду и с просьбойразрешения Пример кода:
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\test_r"); f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\example\out.txt"); try { f2.Demand(); } catch (SecurityException s) { Console.WriteLine(s.Message); }понимание безопасности доступа к коду .NET
является ли "безопасность доступа к коду" какой-либо реальной пользой?
Comments