Язык программирования C#9 и платформа .NET5
Часть 364 из 642 Информация о книге
<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и позволить компилятору сгенерировать логику завершения (подробности ищите в главе 8):usingvar 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(). Взгляните на следующий код:FileStreamvar 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()(описание его членов приведено в табл. 20.5):FileModepublic enum FileMode{CreateNew,Create,Open,OpenOrCreate,Truncate,Append}Второй параметр метода
— значение перечисленияOpen()— служит для определения поведения чтения/записи лежащего в основе потока:FileAccesspublic enum FileAccess{Read,Write,ReadWrite}Наконец, третий параметр метода
— значение перечисленияOpen()— указывает, каким образом файл может совместно использоваться другими файловыми дескрипторами:FileSharepublic 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
