Pergunta

Tendo este código:

using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
   //save something here
}

Precisamos fechar a BinaryWriter?Se não, por quê?

Foi útil?

Solução

Enquanto é tudo embrulhado em um using bloco, então você não precisa chamar explicitamente Close.

O using bloco irá garantir que o objeto é descartado, e o Close e Dispose métodos são intercambiáveis em BinaryWriter.(O Close apenas chama o método Dispose por trás dos bastidores.)

Outras dicas

Colocá -lo em uma instrução Usando conforme seu exemplo de código será chamado de disposição, que fecha o fluxo subjacente, então não. Você pode ver isso através do refletor:

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        this.OutStream.Close();
    }
}

Com o código que você tem, ele fechará o arquivo assim que ele sair do bloco de uso, para que você não precise ligar para o Fechar Explcitly.

O único motivo para não usar a instrução Us usando seria se você deseja que o arquivo ainda esteja aberto depois de terminar o seu BinaryWriter; nesse caso, você deve manter uma referência dele em vez de passá -lo para o construtor como esse.

O bloco de uso fechará automaticamente o escritor binário e o colocará em um estado para ser gc'ed. O uso de blocos é açúcar sintático para fazer o manuseio de exceções e o fechamento do fluxo.

Ao encerrar o escritor em um bloco de uso, o fechamento acontecerá automaticamente quando o escritor estiver disposto. Portanto, neste caso, você não precisa fechar explicitamente o escritor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top