Как создать файл и любые папки, если папки не существуют?
Представьте, что я хочу создать (или перезаписать) следующий файл: - C:\Temp\Bar\Foo\Test.txt
Используя метод File.Create(..), это может сделать это.
НО, если у я нет ни одной из следующих папок (из этого примера, выше)
тогда я получаю DirectoryNotFoundException.
Итак, задан путь, как мы можем рекурсивно создавать все папки, необходимые для создания файла.. для этого пути? Если существуют папки Temp или Bar, но Foo не делает. то это тоже создается.
Для простоты давайте предположим, что нет проблем безопасности - все разрешения в порядке и т.д.
Ответы
Ответ 1
// Determine whether the directory exists.
if (Directory.Exists(path))
{
Console.WriteLine("That path exists already.");
return;
}
// Try to create the directory.
DirectoryInfo di = Directory.CreateDirectory(path);
Console.WriteLine("The directory was created successfully at {0}.",
Directory.GetCreationTime(path));
См. эту страницу MSDN.
Надеюсь, что это поможет!
Ответ 2
Подводя итог тому, что было прокомментировано в других ответах:
//path = @"C:\Temp\Bar\Foo\Test.txt";
Directory.CreateDirectory(Path.GetDirectoryName(path));
Directory.CreateDirectory
будет создавать каталоги рекурсивно, и если каталог уже существует, он будет возвращаться без ошибок.
Если в C:\Temp\Bar\Foo
появился файл Foo
, будет выбрано исключение.
Ответ 3
Используйте Directory.CreateDirectory перед созданием файла. Он создает папку рекурсивно для вас.
Ответ 4
Вам нужно будет проверить обе части пути (каталог и имя файла) и создать каждый, если он не существует.
Используйте File.Exists
и Directory.Exists
, чтобы узнать, существуют ли они. Directory.CreateDirectory
создаст для вас весь путь, так что вам когда-нибудь понадобится называть это один раз, если каталог не существует, просто создайте файл.
Ответ 5
Вы должны использовать Directory.CreateDirectory.
http://msdn.microsoft.com/en-us/library/54a0at6s.aspx
Ответ 6
. заданный путь, как мы можем рекурсивно создавать все папки, необходимые для создания файла.. для этого пути
Создает все каталоги и подкаталоги, как указано в пути.
Directory.CreateDirectory(path);
то вы можете создать файл.
Ответ 7
Вы хотите, чтобы Directory.CreateDirectory()
Вот класс, который я использую (преобразованный в С#), если вы передадите ему исходный каталог и пункт назначения, он скопирует все файлы и подпапки этого каталога в пункт назначения:
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);
}
}
}
}
Ответ 8
Предполагая, что ваша сборка /exe имеет FileIO, это само по себе, хорошо не правильно. Приложение не может работать с правами администратора. Важно рассмотреть Безопасность доступа кодов и запрос permissions
Пример кода:
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
Является ли "Безопасность доступа к коду" для любого реального мира?
Ответ 9
Я знаю, что здесь есть несколько других ответов, но ни один из них не является достаточно полным, следующий код будет создавать каталоги (если не существует), а затем копировать файлы.
// 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"));
}
}
}