Compartilhar via


System.IO.FileStream classe

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

Use a classe para ler, gravar, abrir e fechar arquivos em um sistema de arquivos e para manipular outros identificadores do sistema operacional relacionados a FileStream arquivos, incluindo pipes, entrada padrão e saída padrão. Você pode usar os Readmétodos , , e para executar operações síncronas ou os métodos , WriteAsyncCopyToWrite, CopyToAsynce FlushAsyncFlush para executar operações assíncronas.ReadAsync Use os métodos assíncronos para executar operações de arquivo com uso intensivo de recursos sem bloquear o thread principal. Essa consideração sobre o desempenho é particularmente importante em um aplicativo da Microsoft Store 8.x ou aplicativo de desktop em que uma operação demorada de fluxo pode bloquear o thread de interface do usuário e fazer seu aplicativo parecer como se não estivesse funcionando. FileStream buffers de entrada e saída para melhor desempenho.

Importante

Esse tipo implementa a interface IDisposable. Quando você terminar de usar o tipo, deverá descartá-lo direta ou indiretamente. Para descartar o tipo diretamente, chame o método Dispose dele em um bloco try/catch. Para descartá-lo indiretamente, use um constructo de linguagem como using ( em C#) ou Using (em Visual Basic). Saiba mais na seção "Como usar um objeto que implementa IDisposable" no tópico da interface IDisposable.

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

O Seek método oferece suporte a 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 bytes. 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 oferecem suporte a acesso aleatório. No momento da construção, o CanSeek valor da propriedade é definido como true ou false dependendo do tipo de arquivo subjacente. Se o tipo de arquivo subjacente for FILE_TYPE_DISK, conforme definido em winbase.h, o valor da CanSeek propriedade será true. Caso contrário, o valor da CanSeek propriedade será 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 de uma matriz de bytes e é semelhante à FileStream classe.

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

Detecção de mudanças de posição do fluxo

Quando um FileStream objeto não tem uma retenção exclusiva em seu identificador, outro thread pode acessar o identificador de arquivo simultaneamente e alterar a posição do ponteiro de arquivo do sistema operacional que está associado ao identificador de arquivo. Nesse caso, a posição armazenada em cache no objeto e os dados armazenados em cache no FileStream buffer podem ser comprometidos. O FileStream objeto executa rotineiramente verificações em métodos que acessam o buffer armazenado em cache para garantir que a posição do identificador do sistema operacional seja a mesma usada pelo FileStream objeto.

Se uma alteração inesperada na posição do identificador for detectada em uma chamada para o método, o .NET descarta o conteúdo do buffer e lê o Read fluxo do arquivo 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 identificador for detectada em uma chamada para o método, o Write conteúdo do buffer será descartado e uma IOException exceção será lançada.

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