Compartilhar via


E/S de arquivo e de fluxo

E/S (entrada/saída) de arquivos e fluxos refere-se à transferência de dados de ou para uma mídia de armazenamento. No .NET, os System.IO namespaces contêm tipos que permitem a leitura e gravação, de forma síncrona e assíncrona, em fluxos de dados e arquivos. Esses namespaces também contêm tipos que executam compactação e descompactação em arquivos e tipos que permitem a comunicação por meio de pipes e portas serial.

Um arquivo é uma coleção ordenada e nomeada de bytes que tem armazenamento persistente. Ao trabalhar com arquivos, você trabalha com caminhos de diretório, armazenamento em disco e nomes de arquivo e diretório. Por outro lado, um fluxo é uma sequência de bytes que você pode usar para ler e gravar em um repositório de backup, que pode ser um dos vários meios de armazenamento (por exemplo, discos ou memória). Assim como há vários repositórios de backup diferentes de discos, há vários tipos de fluxos que não sejam fluxos de arquivos, como rede, memória e fluxos de pipe.

Arquivos e diretórios

Você pode usar os tipos no System.IO namespace para interagir com arquivos e diretórios. Por exemplo, você pode obter e definir propriedades para arquivos e diretórios e recuperar coleções de arquivos e diretórios com base nos critérios de pesquisa.

Para convenções de nomenclatura de caminho e as maneiras de expressar um caminho de arquivo para sistemas Windows, inclusive com a sintaxe do dispositivo DOS com suporte no .NET Core 1.1 e posterior e .NET Framework 4.6.2 e posterior, consulte formatos de caminho de arquivo em sistemas Windows.

Aqui estão algumas classes de diretório e arquivo comumente usadas:

  • File – fornece métodos estáticos para criar, copiar, excluir, mover e abrir arquivos e ajuda a criar um FileStream objeto.

  • FileInfo – fornece métodos de instância para criar, copiar, excluir, mover e abrir arquivos e ajuda a criar um FileStream objeto.

  • Directory – fornece métodos estáticos para criar, mover e enumerar por meio de diretórios e subdiretórios.

  • DirectoryInfo – fornece métodos de instância para criar, mover e enumerar por meio de diretórios e subdiretórios.

  • Path – fornece métodos e propriedades para processar cadeias de caracteres de diretório de maneira multiplataforma.

Você sempre deve fornecer um tratamento de exceção robusto ao chamar métodos de sistema de arquivos. Para obter mais informações, consulte Tratamento de erros de E/S.

Além de usar essas classes, os usuários do Visual Basic podem usar os métodos e as propriedades fornecidos pela Microsoft.VisualBasic.FileIO.FileSystem classe para E/S de arquivo.

Veja como copiar diretórios, como criar uma listagem de diretórios e como enumerar diretórios e arquivos.

Fluxos

A classe Stream base abstrata dá suporte à leitura e à escrita de bytes. Todas as classes que representam fluxos herdam da Stream classe. A Stream classe e suas classes derivadas fornecem uma exibição comum de fontes de dados e repositórios e isolam o programador dos detalhes específicos do sistema operacional e dos dispositivos subjacentes.

Os fluxos envolvem três operações fundamentais:

  • Leitura – transferindo dados de um fluxo para uma estrutura de dados, como uma matriz de bytes.

  • Gravação – Transferência de dados para um fluxo a partir de uma fonte de dados.

  • Busca – Consulta e modificação da posição atual em um fluxo.

Dependendo da fonte de dados ou repositório subjacente, um fluxo pode dar suporte apenas a alguns desses recursos. Por exemplo, a classe PipeStream não oferece suporte à operação de busca. As propriedades CanRead, CanWrite e CanSeek de um fluxo especificam as operações que o fluxo suporta.

Aqui estão algumas classes de fluxo comumente usadas:

  • FileStream – para ler e gravar em um arquivo.

  • IsolatedStorageFileStream – para ler e gravar em um arquivo no armazenamento isolado.

  • MemoryStream – para ler e gravar na memória como repositório de backup.

  • BufferedStream – para melhorar o desempenho das operações de leitura e gravação.

  • NetworkStream – para ler e gravar em soquetes de rede.

  • PipeStream – Para leitura e gravação sobre pipes anônimos e nomeados.

  • CryptoStream – para vincular fluxos de dados a transformações criptográficas.

Para obter um exemplo de como trabalhar com fluxos de forma assíncrona, consulte E/S de Arquivo Assíncrono.

Leitores e escritores

O System.IO namespace também fornece tipos para ler caracteres codificados de fluxos e escrevê-los em fluxos. Normalmente, os fluxos são projetados para entrada e saída de bytes. 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. Cada classe de leitor e gravador é associada a um fluxo de dados, que pode ser recuperado por meio da propriedade da classe BaseStream.

Aqui estão algumas classes de leitura e escrita frequentemente usadas:

  • BinaryReader e BinaryWriter – para ler e gravar tipos de dados primitivos como valores binários.

  • StreamReader e StreamWriter – Para leitura e gravação de caracteres usando um valor de codificação para converter os caracteres para/de bytes.

  • StringReader e StringWriter – Para leitura e gravação de caracteres e cadeias de caracteres.

  • TextReader e TextWriter – servem como classes base abstratas para outros leitores e escritores que leem e gravam caracteres e cadeias de caracteres, mas não dados binários.

Veja 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.

Operações assíncronas de E/S

Ler ou gravar uma grande quantidade de dados pode ter uso intensivo de recursos. Você deve executar essas tarefas de forma assíncrona se o aplicativo precisar permanecer responsivo ao usuário. Com operações de E/S síncronas, o thread da interface do usuário fica bloqueado até que a operação de alta demanda de recursos seja concluída. Use operações assíncronas de E/S ao desenvolver aplicativos da Windows 8.x Store para impedir a criação da impressão de que seu aplicativo parou de funcionar.

Os membros assíncronos contêm Async em seus nomes, como , CopyToAsyncFlushAsynce ReadAsyncWriteAsync métodos. Você usa esses métodos com as palavras-chave async e await.

Para obter mais informações, consulte E/S de arquivo assíncrono.

Compactação

Compactação refere-se ao processo de redução do tamanho de um arquivo para armazenamento. Descompactação é o processo de extrair o conteúdo de um arquivo compactado para que eles estejam em um formato utilizável. O System.IO.Compression namespace contém tipos para compactar e descompactar arquivos e fluxos.

As seguintes classes são frequentemente usadas ao compactar e descompactar arquivos e fluxos:

  • ZipArchive – para criar e recuperar entradas no arquivo zip.

  • ZipArchiveEntry – para representar um arquivo compactado.

  • ZipFile – para criar, extrair e abrir um pacote compactado.

  • ZipFileExtensions – para criar e extrair entradas em um pacote compactado.

  • DeflateStream – para compactar e descompactar fluxos usando o algoritmo Deflate.

  • GZipStream – para compactar e descompactar fluxos no formato de dados gzip.

Veja como compactar e extrair arquivos.

Armazenamento isolado

O armazenamento isolado é um mecanismo de armazenamento de dados que fornece isolamento e segurança definindo maneiras padronizadas de associar código a dados salvos. O armazenamento fornece um sistema de arquivos virtual que é isolado por usuário, assembly e (opcionalmente) domínio. O armazenamento isolado é particularmente útil quando seu aplicativo não tem permissão para acessar arquivos de usuário. Você pode salvar configurações ou arquivos para seu aplicativo de uma maneira controlada pela política de segurança do computador.

O armazenamento isolado não está disponível para aplicativos da Windows 8.x Store; em vez disso, use classes de dados de aplicativo no Windows.Storage namespace. Para obter mais informações, consulte os dados do aplicativo.

As seguintes classes são frequentemente usadas ao implementar o armazenamento isolado:

Consulte Armazenamento Isolado.

Operações de E/S em aplicativos da Windows Store

Os aplicativos .NET para Windows 8.x Store contêm muitos dos tipos de leitura e gravação em fluxos; no entanto, esse conjunto não inclui todos os tipos de E/S do .NET.

Algumas diferenças importantes a serem observadas ao usar operações de E/S em aplicativos da Windows 8.x Store:

Você pode converter entre fluxos do .NET Framework e fluxos do Windows Runtime, se necessário. Para obter mais informações, consulte Como converter entre fluxos do .NET Framework e fluxos do Windows Runtime ou WindowsRuntimeStreamExtensions.

Para obter mais informações sobre operações de E/S em um aplicativo da Windows 8.x Store, consulte Início Rápido: Leitura e gravação de arquivos.

E/S e segurança

Ao usar as classes no System.IO namespace, você deve seguir os requisitos de segurança do sistema operacional, como ACLs (listas de controle de acesso) para controlar o acesso a arquivos e diretórios. Esse requisito é adicional a quaisquer requisitos FileIOPermission. Você pode gerenciar ACLs programaticamente. Para obter mais informações, consulte Como adicionar ou remover entradas da lista de controle de acesso.

As políticas de segurança padrão impedem que aplicativos de Internet ou intranet acessem arquivos no computador do usuário. Portanto, não use as classes de E/S que exigem um caminho para um arquivo físico ao escrever código que será baixado pela Internet ou intranet. Em vez disso, use o armazenamento isolado para aplicativos .NET.

Uma verificação de segurança é executada somente quando o fluxo de dados é construído. Portanto, não abra um fluxo e, em seguida, passe-o para domínios de aplicativo ou código menos confiáveis.

  • Tarefas comuns de E/S
    Fornece uma lista de tarefas de E/S associadas a arquivos, diretórios e fluxos e links para conteúdo e exemplos relevantes para cada tarefa.

  • E/S de arquivo assíncrona
    Descreve as vantagens de desempenho e a operação básica de E/S assíncrona.

  • Armazenamento isolado
    Descreve um mecanismo de armazenamento de dados que fornece isolamento e segurança definindo maneiras padronizadas de associar código a dados salvos.

  • Tubos
    Descreve operações de pipes anônimos e nomeados no .NET.

  • Arquivos mapeados na memória
    Descreve arquivos mapeados em memória, que contêm o conteúdo de arquivos em disco na memória virtual. Você pode usar arquivos mapeados em memória para editar arquivos muito grandes e criar memória compartilhada para comunicação entre processos.