E/S de arquivo e de fluxoFile and Stream I/O

E/S (entrada/saída) de arquivos e fluxos refere-se à transferência de dados de ou para uma mídia de armazenamento.File and stream I/O (input/output) refers to the transfer of data either to or from a storage medium. No .NET Framework, os namespaces System.IO contêm tipos que permitem a leitura e a gravação, de forma síncrona e assíncrona, em fluxos de dados e arquivos.In the .NET Framework, the System.IO namespaces contain types that enable reading and writing, both synchronously and asynchronously, on data streams and files. Esses namespaces também contêm tipos que executam compactação e descompactação em arquivos e tipos que possibilitam a comunicação por meio de pipes e portas seriais.These namespaces also contain types that perform compression and decompression on files, and types that enable communication through pipes and serial ports.

Um arquivo é uma coleção ordenada e nomeada de bytes com armazenamento persistente.A file is an ordered and named collection of bytes that has persistent storage. Ao trabalhar com arquivos, você trabalha com caminhos de diretórios, armazenamento em disco e nomes de arquivos e diretórios.When you work with files, you work with directory paths, disk storage, and file and directory names. Por outro lado, um fluxo é uma sequência de bytes que você pode usar para ler e gravar em um repositório, o qual pode ser uma entre vários tipos de mídia de armazenamento (por exemplo, discos ou memória).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). Assim como há vários repositórios diferentes de discos, há vários tipos diferentes de fluxos diferentes de fluxos de arquivos, como os fluxos de rede, memória e pipes.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.

Arquivos e diretóriosFiles and directories

Você pode usar os tipos no namespace System.IO para interagir com arquivos e diretórios.You can use the types in the System.IO namespace to interact with files and directories. Por exemplo, você pode obter e definir propriedades para arquivos e diretórios e recuperar coleções de arquivos e diretórios com base em critérios de pesquisa.For example, you can get and set properties for files and directories, and retrieve collections of files and directories based on search criteria.

Para convenções de nomenclatura de caminhos e os modos de expressar um caminho de arquivo para sistemas Windows, incluindo a sintaxe de dispositivo DOS compatível com o .NET Core 1.1 e posterior e o .NET Framework 4.6.2 e posterior, veja Formatos de caminho de arquivo em sistemas 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.

Aqui estão algumas classes de arquivos e diretórios comumente usadas:Here are some commonly used file and directory classes:

  • File – Fornece métodos estáticos para criar, copiar, excluir, mover e abrir arquivos, além de ajudar na criação de um objeto FileStream.File - provides static methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • FileInfo – Fornece métodos de instâncias para criar, copiar, excluir, mover e abrir arquivos, além de ajudar na criação de um objeto FileStream.FileInfo - provides instance methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • Directory – Fornece métodos estáticos para criar, mover e enumerar ao longo de diretórios e subdiretórios.Directory - provides static methods for creating, moving, and enumerating through directories and subdirectories.

  • DirectoryInfo – Fornece métodos de instância para criar, mover e enumerar ao longo de diretórios e subdiretórios.DirectoryInfo - provides instance methods for creating, moving, and enumerating through directories and subdirectories.

  • Path – Fornece métodos e propriedades para processar cadeias de caracteres de diretório de uma maneira compatível com várias plataformas.Path - provides methods and properties for processing directory strings in a cross-platform manner.

Você sempre deve fornecer tratamento de exceção robusto ao chamar métodos de sistema de arquivos.You should always provide robust exception handling when calling filesystem methods. Para obter mais informações, veja Tratamento de erros de E/S.For more information, see Handling I/O errors.

Além de usar essas classes, os usuários do Visual Basic podem usar os métodos e as propriedades fornecidas pela classe Microsoft.VisualBasic.FileIO.FileSystem para E/S de arquivo.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.

Confira Como copiar diretórios, Como criar uma listagem de diretório e como: enumerar diretórios e arquivos.See How to: Copy Directories, How to: Create a Directory Listing, and How to: Enumerate Directories and Files.

FluxosStreams

A classe base abstrata Stream dá suporte a leitura e gravação de bytes.The abstract base class Stream supports reading and writing bytes. Todas as classes que representam fluxos herdam da classe Stream.All classes that represent streams inherit from the Stream class. A classe Stream e suas classes derivadas fornecem uma visão comum de fontes e repositórios de dados, isolando o programador de detalhes específicos do sistema operacional e dispositivos subjacentes.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.

Fluxos envolvem estas três operações fundamentais:Streams involve three fundamental operations:

  • Leitura – Transferência de dados de um fluxo para uma estrutura de dados, como uma matriz de bytes.Reading - transferring data from a stream into a data structure, such as an array of bytes.

  • Gravação – Transferência de dados para um fluxo a partir de uma fonte de dados.Writing - transferring data to a stream from a data source.

  • Busca – Consulta e modificação da posição atual em um fluxo.Seeking - querying and modifying the current position within a stream.

Dependendo do repositório ou da fonte de dados subjacente, os fluxos podem dar suporte somente algumas dessas capacidades.Depending on the underlying data source or repository, a stream might support only some of these capabilities. Por exemplo, a classe PipeStream não dar suporte à operação de busca.For example, the PipeStream class does not support seeking. As propriedades CanRead, CanWrite e CanSeek de um fluxo especificam as operações às quais o fluxo dá suporte.The CanRead, CanWrite, and CanSeek properties of a stream specify the operations that the stream supports.

Algumas classes de fluxo comumente usadas são:Here are some commonly used stream classes:

  • FileStream – Para leitura e gravação em um arquivo.FileStream – for reading and writing to a file.

  • IsolatedStorageFileStream – Para leitura e gravação em um arquivo no armazenamento isolado.IsolatedStorageFileStream – for reading and writing to a file in isolated storage.

  • MemoryStream – Para leitura e gravação na memória como o repositório de backup.MemoryStream – for reading and writing to memory as the backing store.

  • BufferedStream – Para melhorar o desempenho das operações de leitura e gravação.BufferedStream – for improving performance of read and write operations.

  • NetworkStream – Para leitura e gravação via soquetes de rede.NetworkStream – for reading and writing over network sockets.

  • PipeStream – Para leitura e gravação sobre pipes anônimos e nomeados.PipeStream – for reading and writing over anonymous and named pipes.

  • CryptoStream – Para vincular fluxos de dados a transformações criptográficas.CryptoStream – for linking data streams to cryptographic transformations.

Para um exemplo de como trabalhar com fluxos de forma assíncrona, confira E/S de arquivo assíncrona.For an example of working with streams asynchronously, see Asynchronous File I/O.

Leitores e gravadoresReaders and writers

O namespace System.IO também fornece tipos usados para ler caracteres codificados de fluxos e gravá-los em fluxos.The System.IO namespace also provides types for reading encoded characters from streams and writing them to streams. Normalmente, os fluxos são criados para a entrada e a saída de bytes.Typically, streams are designed for byte input and output. Os tipos de leitor e de gravador tratam a conversão dos caracteres codificados de/para bytes para que o fluxo possa concluir a operação.The reader and writer types handle the conversion of the encoded characters to and from bytes so the stream can complete the operation. Cada classe de leitor e gravador é associada a um fluxo, o qual pode ser recuperado pela propriedade BaseStream da classe.Each reader and writer class is associated with a stream, which can be retrieved through the class's BaseStream property.

Algumas classes de leitores e gravadores comumente usadas são:Here are some commonly used reader and writer classes:

  • BinaryReader e BinaryWriter – Para leitura e gravação de tipos de dados primitivos como valores binários.BinaryReader and BinaryWriter – for reading and writing primitive data types as binary values.

  • StreamReader e StreamWriter – Para leitura e gravação de caracteres usando um valor de codificação para converter os caracteres para/de bytes.StreamReader and StreamWriter – for reading and writing characters by using an encoding value to convert the characters to and from bytes.

  • StringReader e StringWriter – Para leitura e gravação de caracteres e cadeias de caracteres.StringReader and StringWriter – for reading and writing characters to and from strings.

  • TextReader e TextWriter – Funcionam como as classes base abstratas para outros leitores e gravadores que leem e gravam caracteres e cadeias de caracteres, mas não dados binários.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.

Confira Como Ler Texto de um Arquivo, como: Gravar Texto em um Arquivo, como: Ler caracteres de uma cadeia de caracteres e como: Gravar caracteres em uma cadeia de caracteres.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.

Operações de E/S assíncronasAsynchronous I/O operations

A leitura ou gravação de uma grande quantidade de dados pode consumir muitos recursos.Reading or writing a large amount of data can be resource-intensive. Você deve executar essas tarefas de forma assíncrona se seu aplicativo precisar continuar respondendo ao usuário.You should perform these tasks asynchronously if your application needs to remain responsive to the user. Com as operações de E/S síncronas, o thread de interface do usuário é bloqueado até que a operação de uso intensivo seja concluída.With synchronous I/O operations, the UI thread is blocked until the resource-intensive operation has completed. Use operações de E/S assíncronas durante o desenvolvimento de aplicativos Windows Store 8.xWindows 8.x Store para evitar causar a impressão de que o aplicativo parou de funcionar.Use asynchronous I/O operations when developing Windows Store 8.xWindows 8.x Store apps to prevent creating the impression that your app has stopped working.

Os membros assíncronas contêm Async em seus nomes, como os métodos CopyToAsync, FlushAsync, ReadAsync e WriteAsync.The asynchronous members contain Async in their names, such as the CopyToAsync, FlushAsync, ReadAsync, and WriteAsync methods. Você usa esses métodos com as palavras-chave async e await.You use these methods with the async and await keywords.

Para saber mais, confira E/S de arquivo assíncrona.For more information, see Asynchronous File I/O.

CompactaçãoCompression

A compactação refere-se ao processo de reduzir o tamanho de um arquivo para fins de armazenamento.Compression refers to the process of reducing the size of a file for storage. A descompactação é o processo de extrair o conteúdo de um arquivo compactado para um formato utilizável.Decompression is the process of extracting the contents of a compressed file so they are in a usable format. O namespace System.IO.Compression contém tipos para compactar e descompactar arquivos e fluxos.The System.IO.Compression namespace contains types for compressing and decompressing files and streams.

As classes a seguir são frequentemente usadas para compactar e descompactar arquivos e fluxos:The following classes are frequently used when compressing and decompressing files and streams:

  • ZipArchive – Para criar e recuperar entradas em arquivos ZIP.ZipArchive – for creating and retrieving entries in the zip archive.

  • ZipArchiveEntry – Para representar um arquivo compactado.ZipArchiveEntry – for representing a compressed file.

  • ZipFile – Para criar, extrair e abrir um pacote compactado.ZipFile – for creating, extracting, and opening a compressed package.

  • ZipFileExtensions – Para criar e extrair entradas em um pacote compactado.ZipFileExtensions – for creating and extracting entries in a compressed package.

  • DeflateStream – Para compactar e descompactar fluxos usando o algoritmo de Deflate.DeflateStream – for compressing and decompressing streams using the Deflate algorithm.

  • GZipStream – Para compactar e descompactar fluxos no formato de dados GZIP.GZipStream – for compressing and decompressing streams in gzip data format.

Confira Como Compactar e extrair arquivos.See How to: Compress and Extract Files.

Armazenamento isoladoIsolated storage

Um armazenamento isolado é um mecanismo de armazenamento de dados que fornece isolamento e segurança ao definir maneiras padronizadas de associar códigos a dados salvos.Isolated storage is a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data. O armazenamento fornece um sistema de arquivos virtual que é isolado por usuário, assembly e (opcionalmente) domínio.The storage provides a virtual file system that is isolated by user, assembly, and (optionally) domain. O armazenamento isolado é particularmente útil quando o aplicativo não tem permissão para acessar arquivos de usuários.Isolated storage is particularly useful when your application does not have permission to access user files. Você pode salvar configurações ou arquivos para seu aplicativo de modo que ele seja controlado pela política de segurança do computador.You can save settings or files for your application in a manner that is controlled by the computer's security policy.

O armazenamento isolado não está disponível para aplicativos Windows Store 8.xWindows 8.x Store; em vez disso, use as classes de dados do aplicativo no namespace Windows.Storage.Isolated storage is not available for Windows Store 8.xWindows 8.x Store apps; instead, use application data classes in the Windows.Storage namespace. Para saber mais, veja Dados de aplicativo.For more information, see Application data.

As classes a seguir são usadas com frequência na implementação do armazenamento isolado:The following classes are frequently used when implementing isolated storage:

Confira Armazenamentos isolado.See Isolated Storage.

Operações de E/S em aplicativos da Windows StoreI/O operations in Windows Store apps

O .NET para aplicativos da Windows 8.x Store.NET for Windows 8.x Store apps contém muitos dos tipos para leitura e gravação em fluxos. No entanto, esse conjunto não inclui todos os tipos de E/S do .NET Framework.The .NET para aplicativos da Windows 8.x Store.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.

Algumas diferenças importantes que devem ser observadas ao usar operações de E/S em aplicativos Windows Store 8.xWindows 8.x Store:Some important differences to note when using I/O operations in Windows Store 8.xWindows 8.x Store apps:

É possível converter entre fluxos do .NET Framework e fluxos do Tempo de Execução do Windows, se necessário.You can convert between .NET Framework streams and Windows Runtime streams, if necessary. Para obter mais informações, confira Como: Fazer a conversão entre fluxos do .NET Framework e fluxos do Windows Runtime ou WindowsRuntimeStreamExtensions.For more information, see How to: Convert Between .NET Framework Streams and Windows Runtime Streams or WindowsRuntimeStreamExtensions.

Para mais informações sobre operações de E/S em um aplicativo do Windows Store 8.xWindows 8.x Store, confira Início Rápido: Leitura e gravação de arquivos.For more information about I/O operations in a Windows Store 8.xWindows 8.x Store app, see Quickstart: Reading and writing files.

E/S e segurançaI/O and security

Ao usar as classes no namespace System.IO, você deve atender aos requisitos de segurança do sistema operacional, como ACLs (listas de controle de acesso) para controlar o acesso a arquivos e diretórios.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. Esse é um requisito adicional aos requisitos de FileIOPermission.This requirement is in addition to any FileIOPermission requirements. As ACLs podem ser gerenciadas por meio de programação.You can manage ACLs programmatically. Para obter mais informações, confira Como: Adicionar ou remover entradas da lista de controle de acesso.For more information, see How to: Add or Remove Access Control List Entries.

As políticas de segurança padrão impedem que aplicativos da Internet ou intranet acessem arquivos no computador do usuário.Default security policies prevent Internet or intranet applications from accessing files on the user’s computer. Consequentemente, não use classes de E/S que exijam um caminho para um arquivo físico ao escrever código que será baixado via Internet ou intranet.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. Em vez disso, use armazenamento isolado para aplicativos .NET Framework tradicionais ou use dados de aplicativo para aplicativos da Windows Store 8.xWindows 8.x Store.Instead, use isolated storage for traditional .NET Framework applications, or use application data for Windows Store 8.xWindows 8.x Store apps.

Uma verificação de segurança é executada somente quando o fluxo é construído.A security check is performed only when the stream is constructed. Consequentemente, não abra um fluxo para depois passá-lo para código ou domínios de aplicativos menos confiáveis.Therefore, do not open a stream and then pass it to less-trusted code or application domains.

  • Tarefas comuns de E/SCommon I/O Tasks
    Fornece uma lista das tarefas de E/S associadas a arquivos, diretórios e fluxos, além de links para conteúdo e exemplos relevantes para cada tarefa.Provides a list of I/O tasks associated with files, directories, and streams, and links to relevant content and examples for each task.

  • E/S de arquivo assíncronaAsynchronous File I/O
    Descreve as vantagens de desempenho e a operação básica da E/S assíncrona.Describes the performance advantages and basic operation of asynchronous I/O.

  • Armazenamento isoladoIsolated Storage
    Descreve um mecanismo de armazenamento isolado que fornece isolamento e segurança ao definir maneiras padronizadas de associar códigos aos dados salvos.Describes a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data.

  • PipesPipes
    Descreve operações de pipes anônimos e nomeados no .NET Framework.Describes anonymous and named pipe operations in the .NET Framework.

  • Arquivos mapeados em memóriaMemory-Mapped Files
    Descreve arquivos mapeados na memória, os quais armazenam o conteúdo de arquivos do disco na memória virtual.Describes memory-mapped files, which contain the contents of files on disk in virtual memory. Você pode usar arquivos mapeados na memória para editar arquivos muito grandes e para criar memória compartilhada para a comunicação entre processos.You can use memory-mapped files to edit very large files and to create shared memory for interprocess communication.