Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

}

Console.ReadLine;

Вот возможный вывод:

***** Fun with DriveInfo *****

Name: C:\

Type: Fixed

Free space: 284131119104

Format: NTFS

Label: OS

Name: M:\

Type: Network

Free space: 4711871942656

Format: NTFS

Label: DigitalMedia

К

этому моменту вы изучили несколько основных линий поведения классов
Directory
,
DirectoryInfо
и
DriveInfo
. Далее вы ознакомитесь с тем, как создавать, открывать, закрывать и удалять файлы, находящиеся в заданном каталоге.

Работа с типом FileInfo

Как было показано в предыдущем примере

DirectoryApp
, класс
FileInfo
позволяет получать сведения о существующих файлах на жестком диске (такие как время создания, размер и атрибуты) и помогает создавать, копировать, перемещать и удалять файлы. В дополнение к набору функциональности, унаследованной от
FileSystemInfo
, класс
FileInfo
имеет ряд уникальных членов,которые описаны в табл. 20.4.

Обратите внимание, что большинство методов класса

FileInfo
возвращают специфический объект ввода-вывода (например,
FileStream
и
StreamWriter
), который позволяет начать чтение и запись данных в ассоциированный файл во множестве форматов. Вскоре мы исследуем указанные типы, но прежде чем рассмотреть работающий пример, давайте изучим различные способы получения дескриптора файла с использованием класса
FileInfo
.

Метод FileInfo.Create

Следующий набор примеров находится в проекте консольного приложения по имени

SimpleFileIO
. Один из способов создания дескриптора файла предусматривает применение метода
FileInfo.Create
:

using System;

using System.IO;

Console.WriteLine("***** Simple IO with the File Type *****\n");

// Измените это на папку на своей машине, к которой вы имеете доступ

// по чтению/записи или запускайте приложение от имени администратора.

var fileName = $@"C{Path.VolumeSeparatorChar}

{Path.DirectorySeparatorChar}temp

{Path.
DirectorySeparatorChar}Test.dat";

// Создать новый файл на диске С:.

FileInfo f = new FileInfo(fileName);

FileStream fs = f.Create;

// Использовать объект FileStream...

// Закрыть файловый поток.

fs.Close;

На заметку! В зависимости от имеющихся у вас пользовательских разрешений и конфигурации системы примеры, которые здесь рассматриваются, могут требовать запуска Visual Studio от имени администратора.

Метод

FileInfo.Create
возвращает тип
FileStream
, который предоставляет синхронную и асинхронную операции записи/чтения лежащего в его основе файла. Имейте в виду, что объект
FileStream
, возвращаемый
FileInfo.Create
, открывает полный доступ по чтению и записи всем пользователям.

Также обратите внимание, что после окончания работы с текущим объектом

FileStream
необходимо обеспечить закрытие его дескриптора для освобождения внутренних неуправляемых ресурсов потока. Учитывая, что
FileStream
реализует интерфейс
IDisposable
, можно использовать блок
using
и позволить компилятору сгенерировать логику завершения (подробности ищите в главе 8):

var fileName = $@"C{Path.VolumeSeparatorChar}

{Path.DirectorySeparatorChar}Test.dat";

...

// Поместить файловый поток внутрь оператора using.

FileInfo f1 = new FileInfo(fileName);

using (FileStream fs1 = f1.Create)

{

// Использовать объект FileStream...

}

f1.Delete;

На заметку! Почти все примеры в этой главе содержат операторы

using
. Можно также использовать новый синтаксис объявлений
using
, но было решено придерживаться операторов
using
, чтобы сосредоточить примеры на исследуемых компонентах
System.IO
.

Метод FileInfо.Open

С помощью метода

FileInfo.Open
можно открывать существующие файлы, а также создавать новые файлы с более высокой точностью представления, чем обеспечивает метод
FileInfo.Create
, поскольку
Open
обычно принимает несколько параметров для описания общей структуры файла, с которым будет производиться работа. В результате вызова
Open
возвращается объект
FileStream
. Взгляните на следующий код:

var fileName = $@"C{Path.VolumeSeparatorChar}

{Path.DirectorySeparatorChar}Test.dat";

...

// Создать новый файл посредством FileInfо.Open.

FileInfo f2 = new FileInfo(fileName);

using(FileStream fs2 = f2.Open(FileMode.OpenOrCreate,

FileAccess.ReadWrite, FileShare.None))

{

// Использовать объект FileStream...

}

f2.Delete;

Эта версия перегруженного метода

Open
требует передачи трех параметров. Первый параметр указывает общий тип запроса ввода-вывода (например, создать новый файл, открыть существующий файл или дописать в файл), который представлен в виде перечисления
FileMode
(описание его членов приведено в табл. 20.5):

public enum FileMode

Поделиться с друзьями: