Литмир - Электронная Библиотека
A
A

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

FileInfo f = new FileInfo(fileName);

FileStream fs = f.Create();

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

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

fs.Close();

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

Метод

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

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

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

var fileName = $@&quot;C{Path.VolumeSeparatorChar}

                   {Path.DirectorySeparatorChar}Test.dat&quot;;

...

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

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 = $@&quot;C{Path.VolumeSeparatorChar}

                   {Path.DirectorySeparatorChar}Test.dat&quot;;

...

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

FileInfo f2 = new FileInfo(fileName);

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

  FileAccess.ReadWrite, FileShare.None))

{

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

}

f2.Delete();

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

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

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

public enum FileMode

{

  CreateNew,

  Create,

  Open,

  OpenOrCreate,

  Truncate,

  Append

}

Второй параметр метода

Open()
— значение перечисления
FileAccess
— служит для определения поведения чтения/записи лежащего в основе потока:

public enum FileAccess

{

  Read,

  Write,

  ReadWrite

}

Наконец, третий параметр метода

Open()
— значение перечисления
FileShare
— указывает, каким образом файл может совместно использоваться другими файловыми дескрипторами:

public enum FileShare

{

  None,

  Read,

  Write,

  ReadWrite,

  Delete,

  Inheritable

}

Методы FileInfо.OpenRead() и FileInfо.OpenWrite()

Метод

FileInfо.Open()
позволяет получить дескриптор файла в гибкой манере, но класс
FileInfо
также предлагает методы
OpenRead()
и
OpenWrite()
. Как и можно было ожидать, указанные методы возвращают подходящим образом сконфигурированный только для чтения или только для записи объект
FileStream
без необходимости в предоставлении значений разных перечислений. Подобно
FileInfо.Create()
и
FileInfо.Open()
методы
OpenRead()
и
OpenWrite()
возвращают объект
FileStream
.

364
{"b":"847442","o":1}