Основы файлового ввода-вывода
Обновлен: Ноябрь 2007
Абстрактный базовый класс Stream поддерживает чтение и запись байтов. Класс Stream поддерживает асинхронный ввод и вывод. По умолчанию его реализация определяет операции синхронного чтения и записи на основе соответствующих им асинхронных методов, и наоборот.
Все классы, которые работают с потоками, являются производными от класса Stream. Класс Stream и его производные классы предоставляют способ просмотра источников данных и хранилищ объектов, изолируя программиста конкретных от специфических деталей операционной системы и базовых устройств.
При работе с потоками используются следующие основные операции:
Потоки могут быть считаны. Чтение — это перенос информации из потока в структуру данных, такую как массив байтов.
В потоки можно вносить записи. Запись — это перенос информации из источника данных в поток.
Потоки поддерживают поиск. Поиск — это выяснение и изменение текущей позиции внутри потока.
В зависимости от лежащих в основе источника или хранилища данных потоки могут поддерживать только некоторые из этих возможностей. Например, NetworkStreams не поддерживает поиск. Свойства CanRead, CanWrite и CanSeek из Stream и его производных классов определяют операции, поддерживаемые различными потоками.
Список наиболее распространенных задач ввода-вывода содержится в разделе Распространенные задачи ввода-вывода.
Примечание. |
---|
Пользователи Visual Basic могут также использовать методы и свойства, предоставляемые объектом My.Computer.FileSystem для файлового ввода-вывода. Дополнительные сведения см. в разделе Объект My.Computer.FileSystem. |
Классы, используемые в файловом вводе и выводе
Directory предоставляет статические методы операций создания, перемещения и перечисления в директориях и поддиректориях. Класс DirectoryInfo предоставляет методы экземпляра.
DirectoryInfo предоставляет методы экземпляра операций создания, перемещения и перечисления в директориях и поддиректориях. Класс Directory предоставляет статические методы.
DriveInfo предоставляет методы экземпляра для доступа к сведениям о диске.
File предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream. Класс FileInfo предоставляет методы экземпляра.
FileInfo предоставляет методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream. Класс File предоставляет статические методы.
FileStream поддерживает произвольный доступ к файлам с помощью метода Seek. По умолчанию класс FileStream открывает файлы синхронно, но поддерживает и асинхронные операции. Класс File содержит статические методы, а класс FileInfo содержит методы экземпляра класса.
FileSystemInfo является абстрактным базовым классом для FileInfo и DirectoryInfo.
Path предоставляет методы и свойства для обработки строк каталогов межплатформенным способом.
DeflateStream предоставляет методы и свойства для сжатия и распаковки потоков с использованием Deflate алгоритма.
GZipStream предоставляет методы и свойства для сжатия и распаковки потоков. По умолчанию этот класс использует тот же алгоритм, что и класс DeflateStream, но он не может быть расширен для использования других форматов сжатия.
SerialPort предоставляет методы и свойства для управления файлом ресурсов порта с последовательным выводом данных.
Класс File, FileInfo, DriveInfo, Path, Directory, и DirectoryInfo являются изолированными (в Microsoft Visual Basic, NotInheritable). Можно создавать новые экземпляры этих классов, но они не могут иметь производных классов.
Классы, используемые для чтения и записи в поток
Классы BinaryReader и BinaryWriter производят чтение и запись кодированных строк и простых типов данных в потоки.
Класс StreamReader считывает символы из потоков, используя Encoding для преобразования символов в байты, и наоборот. StreamReader имеет конструктор, который пытается выяснить подходящую кодировку для заданного потока, на основе наличия специфичной для кодировкипреамбулы, такой как метка порядка байтов.
StreamWriter записывает символы в потоки, используя кодировку для преобразования символов в байты.
StringReader считывает символы из строк. StringReader позволяет интерпретировать класс Strings с одним и тем же API-интерфейсом, поэтому в качестве выходных данных может использоваться класс Stream в любой кодировке, либо класс String.
StringWriter записывает символы в строки. StringWriter позволяет интерпретировать класс Strings с одним и тем же API-интерфейсом, поэтому в качестве выходных данных может использоваться класс Stream в любой кодировке, либо класс String.
TextReader является абстрактным базовым классом для класса StringReader и класса StreamReader. В то время как реализации абстрактного класса Stream предназначены для побайтового ввода и вывода, реализации TextReader предназначены для вывода знаков в кодировке Unicode.
TextWriter является абстрактным базовым классом для класса StringWriter и класса StreamWriter. В то время как реализации абстрактного класса Stream предназначены для побайтового ввода и вывода, реализации TextWriter предназначены для ввода знаков в кодировке Unicode.
Общие классы потокового ввода и вывода
Класс BufferedStream является потоком, который добавляет буферизацию другому потоку, такому как NetworkStream. (В классе FileStream буферизация является внутренним свойством, а класс MemoryStream не нуждается в буферизации.) Экземпляр класса BufferedStream может быть создан для некоторых типов потоков в целях повышения производительности ввода и вывода. Буфер — это блок байтов памяти, который используется для кэширования данных, тем самым уменьшая количество обращений к операционной системе.
Класс CryptoStream связывает потоки данных с криптографическими преобразованиями. Несмотря на то, что CryptoStream является производным от Stream, он не является частью пространства имен System.IO, а находится в пространстве имен System.Security.Cryptography.
MemoryStream является небуферизованным потоком, чьи инкапсулированные данные напрямую доступны в памяти. Этот поток не имеет резервного хранилища и может быть использован в качестве временного буфера.
Класс NetworkStream представляет Поток через сетевое подключение. Несмотря на то, что NetworkStream является производным от Stream, он не является частью пространства имен System.IO, а находится в пространстве имен System.Net.Sockets.
Ввод-вывод и безопасность
Во время использования классов из пространства имен System.IO для предоставления доступа должны быть выполнены требования безопасности операционной системы, такие как списки управления доступом. Это требование дополняет остальные требования FileIOPermission.
Примечание. |
---|
Списком управления доступом можно управлять на программном уровне. Дополнительные сведения см. в разделах Практическое руководство. Добавление или удаление записей списка управления доступом и Общие сведения о технологии ACL. |
Внимание! |
---|
По умолчанию политика безопасности для Интернета и интрасетей запрещает доступ к файлам. Поэтому при создании кода, который будет передаваться через Интернет, обычные классы ввода/вывода неизолированного хранения не используются. Вместо этого используйте Изолированное хранение. |
Внимание! |
---|
Когда открыт файловый или сетевой поток, проверка безопасности производится только во время создания потока. Поэтому будьте внимательны во время передачи этих потоков коду с меньшим уровнем доверия или доменам приложений. |
См. также
Задачи
Практическое руководство. Создание списка каталогов
Практическое руководство. Считывание из нового файла данных и запись в этот файл
Практическое руководство. Открытие файла журнала и добавление в него данных
Практическое руководство. Считывание текста из файла
Практическое руководство. Запись текста в файл
Практическое руководство. Считывание символов из строки
Практическое руководство. Запись символов в строку