<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 = $@"C{Path.VolumeSeparatorChar}
{Path.DirectorySeparatorChar}Test.dat";
...
<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 = $@"C{Path.VolumeSeparatorChar}
{Path.DirectorySeparatorChar}Test.dat";
...
<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):
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
.