Практическое руководство. Создание файла или папки (Руководство по программированию на C#)
Можно программно создать папку на компьютере, создать вложенную папку, создать файл во вложенной папке и записать данные в этот файл.
Пример
public class CreateFileOrFolder
{
static void Main()
{
// Specify a name for your top-level folder.
string folderName = @"c:\Top-Level Folder";
// To create a string that specifies the path to a subfolder under your
// top-level folder, add a name for the subfolder to folderName.
string pathString = System.IO.Path.Combine(folderName, "SubFolder");
// You can write out the path name directly instead of using the Combine
// method. Combine just makes the process easier.
string pathString2 = @"c:\Top-Level Folder\SubFolder2";
// You can extend the depth of your path if you want to.
//pathString = System.IO.Path.Combine(pathString, "SubSubFolder");
// Create the subfolder. You can verify in File Explorer that you have this
// structure in the C: drive.
// Local Disk (C:)
// Top-Level Folder
// SubFolder
System.IO.Directory.CreateDirectory(pathString);
// Create a file name for the file you want to create.
string fileName = System.IO.Path.GetRandomFileName();
// This example uses a random string for the name, but you also can specify
// a particular name.
//string fileName = "MyNewFile.txt";
// Use Combine again to add the file name to the path.
pathString = System.IO.Path.Combine(pathString, fileName);
// Verify the path that you have constructed.
Console.WriteLine("Path to my file: {0}\n", pathString);
// Check that the file doesn't already exist. If it doesn't exist, create
// the file and write integers 0 - 99 to it.
// DANGER: System.IO.File.Create will overwrite the file if it already exists.
// This could happen even with random file names, although it is unlikely.
if (!System.IO.File.Exists(pathString))
{
using (System.IO.FileStream fs = System.IO.File.Create(pathString))
{
for (byte i = 0; i < 100; i++)
{
fs.WriteByte(i);
}
}
}
else
{
Console.WriteLine("File \"{0}\" already exists.", fileName);
return;
}
// Read and display the data from your file.
try
{
byte[] readBuffer = System.IO.File.ReadAllBytes(pathString);
foreach (byte b in readBuffer)
{
Console.Write(b + " ");
}
Console.WriteLine();
}
catch (System.IO.IOException e)
{
Console.WriteLine(e.Message);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
// Sample output:
// Path to my file: c:\Top-Level Folder\SubFolder\ttxvauxe.vv0
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
//30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
// 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 8
//3 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
}
Если папка уже существует, метод CreateDirectory ничего не делает и исключение не возникает. Однако File.Create заменяет существующий файл новым файлом. В этом примере используется оператор if-else для предотвращения замены существующего файла.
Внесение следующих изменений в примере позволяет задать различные результаты в зависимости от того, существует ли уже файл с определенным именем. Если такого файла не существует, код создает его. Если такой файл существует, код добавляет данные в этот файл.
Укажите непроизвольное имя файла.
// Comment out the following line. //string fileName = System.IO.Path.GetRandomFileName(); // Replace that line with the following assignment. string fileName = "MyNewFile.txt";
Замените инструкцию if-else инструкцией using в следующем коде.
using (System.IO.FileStream fs = new System.IO.FileStream(pathString, FileMode.Append)) { for (byte i = 0; i < 100; i++) { fs.WriteByte(i); } }
Запустите образец несколько раз, чтобы убедиться, что данные добавляются в файл каждый раз.
Другие значения FileMode, которые можно попробовать, см. в разделе FileMode.
При следующих условиях возможно возникновение исключения.
Неверное имя папки. Например, в нем содержатся недопустимые знаки, или имя состоит из одних пробелов (класс ArgumentException). Используйте класс Path для создания допустимых имен путей.
Родительская папка или создаваемая папка доступна только для чтения (класс IOException).
Именем папки является null (класс ArgumentNullException).
Имя папки имеет слишком большую длину (класс PathTooLongException).
В имени папки присутствует только двоеточие, ":" (класс PathTooLongException).
Безопасность
Экземпляр класса SecurityException может появляться в ситуациях частичного доверия.
Если пользователь не имеет разрешения для создания папки, в примере возникает экземпляр класса UnauthorizedAccessException.
См. также
Ссылки
Основные понятия
Руководство по программированию на C#
Другие ресурсы
Файловая система и реестр (Руководство по программированию на C#)