TOC

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 очень помогают, когда вам нужно работать с файлами и каталогами. Они могут помочь вам выполнить большинство необходимых операций, и если вам нужно сделать еще более сложные вещи, эти классы и их методы обычно служат отличными строительными блоками для расширения.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!