Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Шрифт:
Интервал:
Закладка:
<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";
...
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})<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";
...
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})<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.