This article has been localized into Russian by the community.
Управление файлами и каталогами
В предыдущей главе мы рассматривали чтение и запись текста с помощью несложных файлов. Для этого мы использовали класс File, но он делает гораздо больше, чем просто читает и записывает. В сочетании с классом Directory мы можем выполнять практически любые операции с файловой системой, такие как переименование, перемещение, удаление и так далее.
В этой главе будут приведены многочисленные примеры выполнения именно этих вещей. Объяснения будут ограничены, так как используемые методы довольно просты в использовании. Вы должны знать о двух вещах: во-первых, убедитесь, что вы импортируете System.IO следующим образом:
using System.IO;
Кроме того, имейте в виду, что мы здесь не занимаемся обработкой исключений. Перед использованием мы проверим, существуют ли файлы и каталоги, но обработки исключений не происходит, поэтому в случае сбоя приложения происходит сбой. Обработка исключений, как правило, хорошая идея при выполнении операций ввода-вывода. Для получения дополнительной информации, пожалуйста, прочитайте главу по обработке исключений в этом руководстве.
Во всех примерах мы используем простые имена файлов и каталогов, которые должны существовать в том же каталоге, что и сгенерированный EXE-файл вашего приложения. В настройках проекта вы можете увидеть, где генерируется ваш EXE-файл.
Удаление файла
if(File.Exists("test.txt"))
{
File.Delete("test.txt");
if(File.Exists("test.txt") == false)
Console.WriteLine("File deleted...");
}
else
Console.WriteLine("File test.txt does not yet exist!");
Console.ReadKey();
Удаление каталога
if(Directory.Exists("testdir"))
{
Directory.Delete("testdir");
if(Directory.Exists("testdir") == false)
Console.WriteLine("Directory deleted...");
}
else
Console.WriteLine("Directory testdir does not yet exist!");
Console.ReadKey();
Если каталог testdir не пустой, вы получите исключение. Почему? Поскольку эта версия Delete() в классе Directory работает только на пустых каталогах. Это очень легко изменить, хотя:
Directory.Delete("testdir", true);
Дополнительный параметр гарантирует, что метод Delete() является рекурсивным, что означает, что он будет проходить по подкаталогам и удалять его файлы перед удалением каталогов.
Переименование файла
if(File.Exists("test.txt"))
{
Console.WriteLine("Please enter a new name for this file:");
string newFilename = Console.ReadLine();
if(newFilename != String.Empty)
{
File.Move("test.txt", newFilename);
if(File.Exists(newFilename))
{
Console.WriteLine("The file was renamed to " + newFilename);
Console.ReadKey();
}
}
}
Вы заметите, что мы используем метод Move() для переименования файла. Почему не метод Rename()? Потому что такого метода нет, так как перемещение и переименование - это одно и то же.
Переименование каталога
Сделать то же самое с каталогом так же просто:
if(Directory.Exists("testdir"))
{
Console.WriteLine("Please enter a new name for this directory:");
string newDirName = Console.ReadLine();
if(newDirName != String.Empty)
{
Directory.Move("testdir", newDirName);
if(Directory.Exists(newDirName))
{
Console.WriteLine("The directory was renamed to " + newDirName);
Console.ReadKey();
}
}
}
Создание нового каталога
Создать новый каталог тоже легко - просто используйте метод CreateDirectory() в классе Directory, как в этом примере:
Console.WriteLine("Please enter a name for the new directory:");
string newDirName = Console.ReadLine();
if(newDirName != String.Empty)
{
Directory.CreateDirectory(newDirName);
if(Directory.Exists(newDirName))
{
Console.WriteLine("The directory was created!");
Console.ReadKey();
}
}
Чтение и Запись файлов
В качестве последнего примера я покажу вам, как класс File делает его очень простым для чтения и записи в файл. Это можно сделать разными способами с помощью C#, но методы Read* и Write*, найденные в классе File, вероятно, наиболее просты в использовании. Существует три версии: WriteAllBytes(), WriteAllLines() и WriteAllText() с соответствующими методами чтения. Самый простой в использовании - последний, который будет принимать простую строку в качестве входных данных. Позвольте мне демонстрировать, как они работают, на простом примере:
string fileContents = "John Doe & Jane Doe sitting in a tree...";
File.WriteAllText("test.txt", fileContents);
string fileContentsFromFile = File.ReadAllText("test.txt");
Console.WriteLine(fileContentsFromFile);
Обратите внимание, как мало строк кода мне нужно, чтобы что-то записать в файл, а затем прочитать его обратно! Первый параметр обоих методов - это путь, по которому текст должен быть записан и прочитан. Обычно вы указали бы полный путь здесь, но чтобы сделать пример более понятным, я указываю только имя файла, в результате чего файл записывается в тот же каталог, что и файл EXE.
Резюме
Как видите, классы File и Directory очень помогают, когда вам нужно работать с файлами и каталогами. Они могут помочь вам выполнить большинство необходимых операций, и если вам нужно сделать еще более сложные вещи, эти классы и их методы обычно служат отличными строительными блоками для расширения.