C# Файловый ввод и вывод

aФайл— это коллекция данных, хранящаяся на диске с указанным именем и путем к каталогу. Когда файл открывается для чтения и записи, он становитсяпотоком。

По сути, поток — это последовательность байтов, передаваемая по каналу связи. Существуют два основных потока:входной потокивыходной поток。входной потокИспользуется для чтения данных из файла (операции чтения),выходной потокИспользуется для записи данных в файл (операции записи).

Классы ввода-вывода C#

Пространство имен System.IO содержит различные классы для выполнения различных файловых операций, таких как создание и удаление файлов, чтение или запись файлов, закрытие файлов и т. д.

В следующей таблице перечислены некоторые часто используемые неабстрактные классы в пространстве имен System.IO:

Класс ввода-выводаОписание
BinaryReaderСчитывает необработанные данные из двоичного потока.
BinaryWriterЗаписывает необработанные данные в двоичном формате.
BufferedStreamВременное хранилище для байтовых потоков.
КаталогПомогает в операциях со структурой каталогов.
DirectoryInfoИспользуется для выполнения операций над каталогами.
DriveInfoПредоставляет информацию о дисках.
ФайлПомогает при обработке файлов.
FileInfoИспользуется для выполнения операций над файлами.
FileStreamИспользуется для чтения и записи в любой позиции файла.
MemoryStreamИспользуется для произвольного доступа к потокам данных, хранящимся в памяти.
ПутьВыполняет операции с информацией о пути.
StreamReaderИспользуется для чтения символов из потока байтов.
StreamWriterИспользуется для записи символов в поток.
StringReaderИспользуется для чтения строкового буфера.
StringWriterИспользуется для записи строкового буфера.

Класс FileStream

В пространстве имен System.IO, классFileStreamобеспечивает чтение, запись и закрытие файлов. Этот класс является производным от абстрактного класса Stream.

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

FileStream <object_name> = new FileStream( <file_name>,
<FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);

Например, создайте объект FileStreamFдля чтения файла с именемsample.txtФайл:

FileStream F = new FileStream("sample.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
ПараметрОписание
FileMode

FileModeПеречисление определяет различные способы открытия файлов. Члены перечисления FileMode:

  • Append: Открывает существующий файл и помещает курсор в конец файла. Если файл не существует, он создаёт файл.
  • Create: Создаёт новый файл. Если файл уже существует, он удаляет старый файл, а затем создаёт новый файл.
  • CreateNew: Указывает, что операционная система должна создать новый файл. Если файл уже существует, выбрасывается исключение.
  • Open: Открывает существующий файл. Если файл не существует, выбрасывается исключение.
  • OpenOrCreate: Указывает, что операционная система должна открыть существующий файл. Если файл не существует, он создаёт новый файл с указанным именем и открывает его.
  • Truncate: Открывает существующий файл и после открытия усекает его до нулевого размера в байтах. Затем мы можем записать в файл полностью новые данные, но исходная дата создания файла сохраняется. Если файл не существует, выбрасывается исключение.
FileAccess

FileAccessЧлены перечисления:Read、ReadWriteиWrite。

FileShare

FileShareЧлены перечисления:

  • Inheritable: Позволяет наследовать дескриптор файла дочерними процессами. Win32 не поддерживает эту функциональность напрямую.
  • None: Запрещает совместное использование текущего файла. До закрытия файла любой запрос на открытие файла (сделанный этим процессом или другим процессом) завершится ошибкой.
  • Read: Позволяет впоследствии открывать файл для чтения. Если этот флаг не указан, любой запрос на открытие файла для чтения (сделанный этим процессом или другим процессом) завершится ошибкой до закрытия файла. Однако, даже если этот флаг указан, для доступа к файлу могут по-прежнему требоваться дополнительные разрешения.
  • ReadWrite: Позволяет впоследствии открывать файл для чтения или записи. Если этот флаг не указан, любой запрос на открытие файла для чтения или записи (сделанный этим процессом или другим процессом) завершится ошибкой до закрытия файла. Однако, даже если этот флаг указан, для доступа к файлу могут по-прежнему требоваться дополнительные разрешения.
  • Write: Позволяет впоследствии открывать файл для записи. Если этот флаг не указан, любой запрос на открытие файла для записи (сделанный этим процессом или другим процессом) завершится ошибкой до закрытия файла. Однако, даже если этот флаг указан, для доступа к файлу могут по-прежнему требоваться дополнительные разрешения.
  • Delete: Позволяет впоследствии удалить файл.

Пример

Следующая программа демонстрирует использование классаFileStream:

Пример

using System;
using System.IO;

namespace FileIOApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            FileStream F = new FileStream("test.dat",
            FileMode.OpenOrCreate, FileAccess.ReadWrite);

            for (int i = 1; i <= 20; i++)
            {
                F.WriteByte((byte)i);
            }

            F.Position = 0;

            for (int i = 0; i <= 20; i++)
            {
                Console.Write(F.ReadByte() + " ");
            }
            F.Close();
            Console.ReadKey();
        }
    }
}

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1

C#: расширенные операции с файлами

Приведённые выше примеры демонстрируют простые файловые операции в C#. Однако, чтобы в полной мере использовать мощные возможности классов System.IO в C#, необходимо знать часто используемые свойства и методы этих классов.

В следующих разделах мы рассмотрим эти классы и выполняемые ими операции. Пожалуйста, перейдите по ссылкам, чтобы узнать больше о каждой части:

темаОписание
Чтение и запись текстовых файловЭто включает чтение и запись текстовых файлов.StreamReaderиStreamWriterКласс помогает выполнять чтение и запись текстовых файлов.
Чтение и запись двоичных файловЭто включает чтение и запись двоичных файлов.BinaryReaderиBinaryWriterКласс обеспечивает чтение и запись двоичных файлов.
Операции с файловой системой WindowsЭто позволяет программистам на C# просматривать и находить файлы и каталоги Windows.
Другие расширения