Предположите, что я хочу создать (или перезапись) следующий файл:- C:\Temp\Bar\Foo\Test.txt
Использование Файла. Создать (..) метод, это может сделать это.
НО, если у меня нет ни одной из следующих папок (от того пути в качестве примера, выше)
затем я бросил DirectoryNotFoundException.
Так.. учитывая путь, как мы можем рекурсивно создать все папки, необходимые для создания файла.. для того пути? Если папки Temp или Bar существуют, но Foo не делает... затем, это создается также.
Для простоты, позволяет, предполагают, что нет никаких Проблем безопасности - все полномочия прекрасны и т.д.
DirectoryInfo di = Directory.CreateDirectory(path);
Console.WriteLine("The directory was created successfully at {0}.",
Directory.GetCreationTime(path));
См. эту страницу MSDN.
Надеюсь, это поможет!
Используйте Directory.CreateDirectory перед созданием файла. Это создаст папку рекурсивно для вас.
Вам нужно будет проверить обе части пути (каталог и имя файла) и создать каждую, если она не существует.
Используйте Файл.Существует
и Каталог.Существует
, чтобы узнать, существуют ли они. Directory.CreateDirectory
создаст для вас весь путь, поэтому вам нужно вызвать его только один раз, если каталог не существует, а затем просто создать файл.
Вы хотите Directory.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);
}
}
}
}
. задан путь, как мы можем рекурсивно создать все папки, необходимые для создания файла ... для этого пути
Создает все каталоги и подкаталоги, указанные путем.
Directory.CreateDirectory(path);
затем вы можете создать файл.
Предполагая, что ваша сборка / 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
Используется ли «Безопасность доступа для кода» в реальном мире?