Classe System.IO.FileStream

Observação

Este artigo fornece observações complementares à documentação de referência para esta API.

Use a FileStream classe para ler, gravar, abrir e fechar arquivos em um sistema de arquivos e para manipular outros identificadores do sistema operacional relacionados a arquivos, incluindo pipes, entrada padrão e saída padrão. Você pode usar os Readmétodos , Write, CopyToe Flush para executar operações síncronas, ou os métodos , ReadAsync, WriteAsynce CopyToAsync para executar operações assíncronasFlushAsync. Use os métodos assíncronos para executar operações de arquivo que consomem muitos recursos sem bloquear o thread principal. Essa consideração de desempenho é particularmente importante em um aplicativo da Windows Store 8.x ou aplicativo da área de trabalho, onde uma operação de fluxo demorada pode bloquear o thread da interface do usuário e fazer com que seu aplicativo pareça como se não estivesse funcionando. FileStream Buffers de entrada e saída para um melhor desempenho.

Importante

Este tipo implementa a interface IDisposable. Quando terminar de usar o tipo, você deve eliminá-lo direta ou indiretamente. Para descartar o tipo diretamente, chame seu método Dispose em um bloco try/catch. Para descartá-lo indiretamente, use uma construção de linguagem como using (em C#) ou Using (em Visual Basic). Para obter mais informações, consulte a seção "Usando um objeto que implementa IDisposable" no tópico da IDisposable interface.

A IsAsync propriedade deteta se o identificador de arquivo foi aberto de forma assíncrona. Você especifica esse valor quando cria uma instância da FileStream classe usando um construtor que tem um isAsyncparâmetro , useAsync, ou options . Quando a propriedade é true, o fluxo utiliza E/S sobrepostas para executar operações de arquivo de forma assíncrona. No entanto, a IsAsync propriedade não precisa ser true para chamar o ReadAsyncWriteAsync, , ou CopyToAsync método. Quando a IsAsync propriedade é false e você chama as operações assíncronas de leitura e gravação, o thread da interface do usuário ainda não está bloqueado, mas a operação de E/S real é executada de forma síncrona.

O Seek método suporta acesso aleatório a arquivos. Seek permite que a posição de leitura/gravação seja movida para qualquer posição dentro do arquivo. Isso é feito com parâmetros de ponto de referência de deslocamento de byte. O deslocamento de byte é relativo ao ponto de referência de busca, que pode ser o início, a posição atual ou o fim do arquivo subjacente, conforme representado pelos três membros da SeekOrigin enumeração.

Observação

Os arquivos de disco sempre suportam acesso aleatório. No momento da construção, o valor da CanSeek propriedade é definido como true ou false dependendo do tipo de arquivo subjacente. Se o tipo de ficheiro subjacente for FILE_TYPE_DISK, tal como definido em winbase.h, o valor da propriedade CanSeek será true. Caso contrário, o valor da CanSeek propriedade é false.

Se um processo termina com parte de um arquivo bloqueado ou fecha um arquivo que tem bloqueios pendentes, o comportamento é indefinido.

Para operações de diretório e outras operações de arquivo, consulte as Fileclasses , Directorye Path . A File classe é uma classe de utilitário que tem métodos estáticos principalmente para a criação de objetos com base em caminhos de FileStream arquivo. A MemoryStream classe cria um fluxo a partir de uma matriz de bytes e é semelhante à FileStream classe.

Para obter uma lista de operações comuns de arquivos e diretórios, consulte Tarefas comuns de E/S.

Deteção de alterações de posição do fluxo

Quando um FileStream objeto não tem uma retenção exclusiva sobre o seu manípulo, outro thread pode aceder ao manípulo de ficheiro simultaneamente e alterar a posição do ponteiro de ficheiro do sistema operativo associado ao manípulo de ficheiro. Nesse caso, a posição em cache no FileStream objeto e os dados armazenados em cache no buffer podem ser comprometidos. O objeto FileStream executa rotineiramente verificações em métodos que acessam o buffer armazenado em cache para garantir que a posição do manipulador do sistema operativo seja a mesma que a posição em cache usada pelo objeto FileStream.

Se uma alteração inesperada na posição do identificador for detetada numa chamada para o método Read, o .NET descartará o conteúdo do buffer e lerá o fluxo do ficheiro novamente. Isso pode afetar o desempenho, dependendo do tamanho do arquivo e de quaisquer outros processos que possam afetar a posição do fluxo de arquivos.

Se uma alteração inesperada na posição do manípulo for detetada durante uma chamada ao Write método, o conteúdo do buffer será descartado e uma IOException exceção será lançada.

Um FileStream objeto não terá uma retenção exclusiva sobre seu identificador quando a propriedade SafeFileHandle for acessada para expor o identificador ou o objeto FileStream receber a propriedade SafeFileHandle no seu construtor.