Файловый и потоковый ввод-выводFile and Stream I/O

Файловый и потоковый ввод-вывод относятся к передаче данных с носителя информации или на него.File and stream I/O (input/output) refers to the transfer of data either to or from a storage medium. В .NET Framework пространства имен System.IO содержат типы, которые обеспечивают как синхронные, так и асинхронные операции чтения и записи для потоков и файлов.In the .NET Framework, the System.IO namespaces contain types that enable reading and writing, both synchronously and asynchronously, on data streams and files. Кроме того, эти пространства имен содержат типы, выполняющие сжатие и распаковку файлов, а также типы, которые обеспечивают взаимодействие через каналы и последовательные порты.These namespaces also contain types that perform compression and decompression on files, and types that enable communication through pipes and serial ports.

Файл — это упорядоченная и именованная последовательность байтов, имеющая постоянное хранилище.A file is an ordered and named collection of bytes that has persistent storage. При работе с файлами используются пути к каталогам, запоминающие устройства, а также имена файлов и каталогов.When you work with files, you work with directory paths, disk storage, and file and directory names. В отличие от файла, поток — это последовательность байтов, которую можно использовать для записи или чтения из вспомогательного запоминающего устройства, являющегося одним из устройств хранения информации (например, дисков или памяти).In contrast, a stream is a sequence of bytes that you can use to read from and write to a backing store, which can be one of several storage mediums (for example, disks or memory). Есть несколько видов запоминающих устройств, отличных от дисков, и существует несколько видов потоков, помимо файловых потоков, например сетевые потоки, потоки памяти и потоки каналов.Just as there are several backing stores other than disks, there are several kinds of streams other than file streams, such as network, memory, and pipe streams.

Файлы и каталогиFiles and directories

Типы в пространстве имен System.IO можно использовать для взаимодействия с файлами и каталогами.You can use the types in the System.IO namespace to interact with files and directories. Например, можно получать и задавать свойства файлов и каталогов, а также извлекать коллекции файлов и каталогов на основе критерия поиска.For example, you can get and set properties for files and directories, and retrieve collections of files and directories based on search criteria.

Соглашения об именовании и способы указать путь к файлу в системах Windows, включая синтаксис устройств DOS, поддерживаемый в .NET Core 1.1 и более поздних версиях и платформе .NET Framework 4.6.2 и более поздних версиях, см. в разделе Форматы путей файлов в системах Windows.For path naming conventions and the ways to express a file path for Windows systems, including with the DOS device syntax supported in .NET Core 1.1 and later and the .NET Framework 4.6.2 and later, see File path formats on Windows systems.

Ниже перечислены некоторые часто используемые классы для файлов и каталогов:Here are some commonly used file and directory classes:

  • File предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а также помогает создать объект FileStream.File - provides static methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • FileInfo предоставляет методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также помогает создать объект FileStream.FileInfo - provides instance methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • Directory предоставляет статические методы для создания, перемещения и перечисления в каталогах и подкаталогах.Directory - provides static methods for creating, moving, and enumerating through directories and subdirectories.

  • DirectoryInfo предоставляет методы экземпляра для создания, перемещения и перечисления в каталогах и подкаталогах.DirectoryInfo - provides instance methods for creating, moving, and enumerating through directories and subdirectories.

  • Path предоставляет методы и свойства для обработки строк каталогов межплатформенным способом.Path - provides methods and properties for processing directory strings in a cross-platform manner.

При вызове методов для работы с файловой системой следует всегда использовать надежные механизмы обработки исключений.You should always provide robust exception handling when calling filesystem methods. Дополнительные сведения см. в разделе об обработке ошибок ввода-вывода.For more information, see Handling I/O errors.

Помимо использования этих классов, пользователи Visual Basic могут использовать методы и свойства, предоставляемые классом Microsoft.VisualBasic.FileIO.FileSystem для файлового ввода-вывода.In addition to using these classes, Visual Basic users can use the methods and properties provided by the Microsoft.VisualBasic.FileIO.FileSystem class for file I/O.

См. практическое руководство по Копирование каталогов, Практическое руководство. Создание списка каталогов и Практическое руководство. перечислить каталоги и файлы.See How to: Copy Directories, How to: Create a Directory Listing, and How to: Enumerate Directories and Files.

ПотокиStreams

Абстрактный базовый класс Stream поддерживает чтение и запись байтов.The abstract base class Stream supports reading and writing bytes. Все классы, представляющие потоки, являются производными от класса Stream.All classes that represent streams inherit from the Stream class. Класс Stream и его производные классы обеспечивают общий способ просмотра источников данных и хранилищ объектов, а также изолируют программиста от специфических особенностей операционной системы и базовых устройств.The Stream class and its derived classes provide a common view of data sources and repositories, and isolate the programmer from the specific details of the operating system and underlying devices.

Потоки включают три основные операции:Streams involve three fundamental operations:

  • Чтение — перенос информации из потока в структуру данных, такую как массив байтов.Reading - transferring data from a stream into a data structure, such as an array of bytes.

  • Запись — перенос данных в поток из источника данных.Writing - transferring data to a stream from a data source.

  • Поиск — определение и изменение текущей позиции внутри потока.Seeking - querying and modifying the current position within a stream.

В зависимости от базового источника или хранилища данных поток может поддерживать лишь некоторые из этих возможностей.Depending on the underlying data source or repository, a stream might support only some of these capabilities. Например, класс PipeStream не поддерживает поиск.For example, the PipeStream class does not support seeking. Свойства CanRead, CanWrite и CanSeek потока определяют операции, поддерживаемые потоком.The CanRead, CanWrite, and CanSeek properties of a stream specify the operations that the stream supports.

Ниже перечислены некоторые часто используемые классы потока:Here are some commonly used stream classes:

  • FileStream — для чтения и записи в файл.FileStream – for reading and writing to a file.

  • IsolatedStorageFileStream — для чтения и записи в файл в изолированном хранилище.IsolatedStorageFileStream – for reading and writing to a file in isolated storage.

  • MemoryStream — для чтения и записи в память в качестве резервного хранилища.MemoryStream – for reading and writing to memory as the backing store.

  • BufferedStream — для повышения быстродействия операций чтения и записи.BufferedStream – for improving performance of read and write operations.

  • NetworkStream — для чтения и записи на сетевые сокеты.NetworkStream – for reading and writing over network sockets.

  • PipeStream — для чтения и записи в анонимные и именованные каналы.PipeStream – for reading and writing over anonymous and named pipes.

  • CryptoStream — для связи потоков данных с криптографическими преобразованиями.CryptoStream – for linking data streams to cryptographic transformations.

Пример асинхронной работы с потоками см. в разделе Асинхронный файловый ввод-вывод.For an example of working with streams asynchronously, see Asynchronous File I/O.

Средства чтения и записиReaders and writers

Пространство имен System.IO также предоставляет типы для чтения закодированных символов из потоков и их записи в потоки.The System.IO namespace also provides types for reading encoded characters from streams and writing them to streams. Как правило, потоки предназначены для ввода и вывода байтов.Typically, streams are designed for byte input and output. Типы чтения и записи обрабатывают преобразование закодированных символов в байты или из байтов, чтобы поток мог завершить операцию.The reader and writer types handle the conversion of the encoded characters to and from bytes so the stream can complete the operation. Каждый класс чтения и записи связан с потоком, который можно получить с помощью свойства класса BaseStream.Each reader and writer class is associated with a stream, which can be retrieved through the class's BaseStream property.

Ниже перечислены некоторые часто используемые классы для чтения и записи:Here are some commonly used reader and writer classes:

  • BinaryReader и BinaryWriter — для чтения и записи простых типов данных, таких как двоичные значения.BinaryReader and BinaryWriter – for reading and writing primitive data types as binary values.

  • StreamReader и StreamWriter — для чтения и записи символов с использованием закодированного значения для преобразования символов в байты или из байтов.StreamReader and StreamWriter – for reading and writing characters by using an encoding value to convert the characters to and from bytes.

  • StringReader и StringWriter — для чтения и записи символов в строки или из строк.StringReader and StringWriter – for reading and writing characters to and from strings.

  • TextReader и TextWriter используются в качестве абстрактных базовых классов для других средств чтения и записи, которые считывают и записывают символы и строки, а не двоичные данные.TextReader and TextWriter – serve as the abstract base classes for other readers and writers that read and write characters and strings, but not binary data.

См. практическое руководство по Считывание текста из файла, Практическое руководство. Запись текста в файл, Практическое руководство. Считывание символов из строки и Практическое руководство. Запись символов в строку.See How to: Read Text from a File, How to: Write Text to a File, How to: Read Characters from a String, and How to: Write Characters to a String.

Асинхронные операции ввода-выводаAsynchronous I/O operations

Чтение и запись больших объемов данных может быть ресурсоемкой.Reading or writing a large amount of data can be resource-intensive. Эти задачи необходимо выполнять асинхронно, если приложение должно продолжать отвечать на запросы пользователя.You should perform these tasks asynchronously if your application needs to remain responsive to the user. В случае синхронных операций ввода-вывода поток пользовательского интерфейса будет заблокирован до тех пор, пока ресурсоемкая операция не завершится.With synchronous I/O operations, the UI thread is blocked until the resource-intensive operation has completed. При разработке приложений для Магазин Windows 8.xWindows 8.x Store используйте асинхронные операции ввода-вывода, чтобы не создавалось впечатления, что приложение прекратило свою работу.Use asynchronous I/O operations when developing Магазин Windows 8.xWindows 8.x Store apps to prevent creating the impression that your app has stopped working.

Имена асинхронных элементов содержат Async, например: CopyToAsync, FlushAsync, ReadAsync и WriteAsync.The asynchronous members contain Async in their names, such as the CopyToAsync, FlushAsync, ReadAsync, and WriteAsync methods. Используйте эти методы с ключевыми словами async и await.You use these methods with the async and await keywords.

Дополнительные сведения см. в разделе Асинхронный файловый ввод-вывод.For more information, see Asynchronous File I/O.

СжатиеCompression

Сжатием называется процесс сокращения размера сохраняемого файла.Compression refers to the process of reducing the size of a file for storage. Распаковка — это процесс извлечения содержимого сжатого файла, что приводит его в формат, пригодный для использования.Decompression is the process of extracting the contents of a compressed file so they are in a usable format. Пространство имен System.IO.Compression содержит типы для сжатия и распаковки файлов и потоков.The System.IO.Compression namespace contains types for compressing and decompressing files and streams.

При сжатии и распаковке файлов и потоков часто используются следующие классы:The following classes are frequently used when compressing and decompressing files and streams:

  • ZipArchive — для создания и восстановления содержимого ZIP-архива.ZipArchive – for creating and retrieving entries in the zip archive.

  • ZipArchiveEntry — для представления сжатого файла.ZipArchiveEntry – for representing a compressed file.

  • ZipFile — для создания, извлечения и открытия сжатого пакета.ZipFile – for creating, extracting, and opening a compressed package.

  • ZipFileExtensions — для создания и извлечения содержимого из сжатого пакета.ZipFileExtensions – for creating and extracting entries in a compressed package.

  • DeflateStream — для сжатия и распаковки потоков с помощью алгоритма Deflate.DeflateStream – for compressing and decompressing streams using the Deflate algorithm.

  • GZipStream — для сжатия и распаковки потоков в формате gzip.GZipStream – for compressing and decompressing streams in gzip data format.

См. практическое руководство по Сжатие и извлечение файлов.See How to: Compress and Extract Files.

Изолированное хранилищеIsolated storage

Изолированное хранилище — это механизм хранения данных, обеспечивающий изоляцию и безопасность путем определения стандартизованных способов сопоставления кода с хранимыми данными.Isolated storage is a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data. Хранилище предоставляет виртуальную файловую систему, изолированную по пользователю, сборке и (необязательно) домену.The storage provides a virtual file system that is isolated by user, assembly, and (optionally) domain. Изолированное хранилище особенно полезно в том случае, когда приложение не имеет разрешения на доступ к файлам пользователя.Isolated storage is particularly useful when your application does not have permission to access user files. Можно сохранить параметры или файлы для приложения таким способом, который контролируется политикой безопасности компьютера.You can save settings or files for your application in a manner that is controlled by the computer's security policy.

Изолированное хранилище недоступно для приложений Магазин Windows 8.xWindows 8.x Store. Вместо этого используйте классы данных приложения в пространстве имен Windows.Storage.Isolated storage is not available for Магазин Windows 8.xWindows 8.x Store apps; instead, use application data classes in the Windows.Storage namespace. Дополнительные сведения см. в разделе Данные приложения.For more information, see Application data.

Часто используются следующие классы, реализующие изолированное хранилище:The following classes are frequently used when implementing isolated storage:

  • IsolatedStorage предоставляет базовый класс для реализации изолированного хранилища.IsolatedStorage – provides the base class for isolated storage implementations.

  • IsolatedStorageFile предоставляет область изолированного хранилища, в которой содержатся файлы и каталоги.IsolatedStorageFile – provides an isolated storage area that contains files and directories.

  • IsolatedStorageFileStream представляет файл в изолированном хранилище.IsolatedStorageFileStream - exposes a file within isolated storage.

См. раздел Изолированное хранилище.See Isolated Storage.

Операции ввода-вывода в приложениях Microsoft StoreI/O operations in Windows Store apps

.NET для приложений Магазина Windows 8.x.NET for Windows 8.x Store apps содержат множество типов для чтения и записи в потоки, однако этот набор содержит не все типы ввода-вывода платформы .NET Framework.The .NET для приложений Магазина Windows 8.x.NET for Windows 8.x Store apps contains many of the types for reading from and writing to streams; however, this set does not include all the .NET Framework I/O types.

Следует отметить некоторые важные различия в использовании операций ввода-вывода для приложений в стиле Магазин Windows 8.xWindows 8.x Store:Some important differences to note when using I/O operations in Магазин Windows 8.xWindows 8.x Store apps:

  • Специальные типы, относящиеся к операциям с файлами, такие как File, FileInfo, Directory и DirectoryInfo, не включены в .NET для приложений Магазина Windows 8.x.NET for Windows 8.x Store apps.Types specifically related to file operations, such as File, FileInfo, Directory and DirectoryInfo, are not included in the .NET для приложений Магазина Windows 8.x.NET for Windows 8.x Store apps. Вместо этого используйте типы в пространстве имен Windows.Storage среды выполнения Windows, например StorageFile и StorageFolder.Instead, use the types in the Windows.Storage namespace of the Windows Runtime, such as StorageFile and StorageFolder.

  • Изолированное хранилище недоступно; вместо этого используйте данные приложения.Isolated storage is not available; instead, use application data.

  • Используйте асинхронные методы, такие как ReadAsync и WriteAsync, чтобы предотвратить блокировку потока пользовательского интерфейса.Use asynchronous methods, such as ReadAsync and WriteAsync, to prevent blocking the UI thread.

  • Типы сжатия на основе пути ZipFile и ZipFileExtensions недоступны.The path-based compression types ZipFile and ZipFileExtensions are not available. Вместо этого используйте типы в пространстве имен Windows.Storage.Compression.Instead, use the types in the Windows.Storage.Compression namespace.

При необходимости можно осуществлять преобразование между потоками .NET Framework и потоками среды выполнения Windows.You can convert between .NET Framework streams and Windows Runtime streams, if necessary. Дополнительные сведения см. в разделе Практическое руководство. Преобразование между потоками .NET Framework и потоками среды выполнения Windows или WindowsRuntimeStreamExtensions.For more information, see How to: Convert Between .NET Framework Streams and Windows Runtime Streams or WindowsRuntimeStreamExtensions.

Дополнительные сведения об операциях ввода-вывода в приложении Магазин Windows 8.xWindows 8.x Store: Краткое руководство. Чтение и запись файлов.For more information about I/O operations in a Магазин Windows 8.xWindows 8.x Store app, see Quickstart: Reading and writing files.

Ввод-вывод и безопасностьI/O and security

При использовании классов в пространстве имен System.IO необходимо выполнить требования безопасности операционной системы, такие как списки управления доступом для контроля доступа к файлам и каталогам.When you use the classes in the System.IO namespace, you must follow operating system security requirements such as access control lists (ACLs) to control access to files and directories. Это требование дополняет остальные требования FileIOPermission.This requirement is in addition to any FileIOPermission requirements. Списками управления доступом можно управлять программно.You can manage ACLs programmatically. Дополнительные сведения см. в разделе Практическое руководство. Добавление или удаление записей списка управления доступом.For more information, see How to: Add or Remove Access Control List Entries.

По умолчанию политика безопасности не позволяет обращаться к файлам на компьютере пользователя через Интернет или из приложений интрасети.Default security policies prevent Internet or intranet applications from accessing files on the user’s computer. Поэтому при составлении кода не используйте классы ввода-вывода, которым нужен путь к физическому файлу, загружаемому через Интернет или интрасеть.Therefore, do not use the I/O classes that require a path to a physical file when writing code that will be downloaded over the Internet or intranet. Вместо этого используйте изолированное хранилище для обычных приложений .NET Framework или данные приложения для приложений Магазин Windows 8.xWindows 8.x Store.Instead, use isolated storage for traditional .NET Framework applications, or use application data for Магазин Windows 8.xWindows 8.x Store apps.

Проверка безопасности выполняется только при создании потока.A security check is performed only when the stream is constructed. Поэтому не рекомендуется открывать поток, а затем передавать его коду с меньшим уровнем доверия или доменам приложений.Therefore, do not open a stream and then pass it to less-trusted code or application domains.

  • Распространенные задачи ввода-выводаCommon I/O Tasks
    Содержит список задач ввода-вывода, связанных с файлами, каталогами и потоками, а также ссылки на соответствующее содержимое и примеры для каждой задачи.Provides a list of I/O tasks associated with files, directories, and streams, and links to relevant content and examples for each task.

  • Асинхронный файловый ввод-выводAsynchronous File I/O
    Описывает преимущества и основные операции асинхронного ввода и вывода.Describes the performance advantages and basic operation of asynchronous I/O.

  • Изолированное хранилищеIsolated Storage
    Описывает механизм хранения данных, обеспечивающий автономность и безопасность путем определения стандартизованных способов сопоставления кода с защищенными данными.Describes a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data.

  • КаналыPipes
    Описывает операции с анонимными и именованными каналами в .NET Framework.Describes anonymous and named pipe operations in the .NET Framework.

  • Сопоставленные в памяти файлыMemory-Mapped Files
    Описание отображаемых в память файлов, позволяющих разместить содержимое файлов с диска в виртуальной памяти.Describes memory-mapped files, which contain the contents of files on disk in virtual memory. С их помощью можно вносить изменения в очень большие файлы и создавать совместно используемую память для межпроцессного взаимодействия.You can use memory-mapped files to edit very large files and to create shared memory for interprocess communication.