1
resposta

[Dúvida] FileMode e modificação de arquivo enquanto aplicação está rodando

Olá a todos,

Espero que esta mensagem os encontre bem!

Estou tentando realizar o teste de modificação do arquivo com a aplicação rodando na seguinte estrutura sem usar o método close. Nos exemplos e vídeos é mencionado que isso é possível, porém, não estou conseguindo. O próprio Luri diz que não é possível sem usar o FileMode.Create.

using (var fluxoDoArquivo = new FileStream(enderecoDoArquivo, FileMode.Open)) { var buffer = new byte[1024]; // 1 kb var numeroDeBytesLidos = -1;

while (numeroDeBytesLidos != 0)
{
    numeroDeBytesLidos = fluxoDoArquivo.Read(buffer, 0, 1024);
    EscreverBuffer(buffer);
}

}

1 resposta

Olá, estudante.

Tudo bem?

O que pode estar acontecendo é que o FileStream está bloqueando o arquivo para leitura e escrita devido ao modo de abertura que você está utilizando.

Quando você usa FileMode.Open, o arquivo é aberto apenas para leitura. Se você deseja modificar o arquivo enquanto a aplicação está rodando, você deve abrir o arquivo com um modo que permita escrita, como FileMode.OpenOrCreate ou FileMode.Append, dependendo do que você deseja fazer.

Aqui está um exemplo de como você pode abrir o arquivo para leitura e escrita:

using (var fluxoDoArquivo = new FileStream(enderecoDoArquivo, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    var buffer = new byte[1024]; // 1 kb
    int numeroDeBytesLidos;

    while ((numeroDeBytesLidos = fluxoDoArquivo.Read(buffer, 0, buffer.Length)) > 0)
    {
        EscreverBuffer(buffer);
    }

    // Exemplo de escrita no arquivo
    string textoParaAdicionar = "Novo texto a ser adicionado ao arquivo.";
    byte[] bytesParaAdicionar = System.Text.Encoding.UTF8.GetBytes(textoParaAdicionar);
    fluxoDoArquivo.Write(bytesParaAdicionar, 0, bytesParaAdicionar.Length);
}

Neste exemplo, o FileStream é aberto com FileMode.OpenOrCreate e FileAccess.ReadWrite, permitindo tanto leitura quanto escrita. Dessa forma, você pode ler o conteúdo do arquivo e também escrever nele enquanto a aplicação está rodando.

Espero ter ajudado e bons estudos!