1
resposta

uma parte do arquivo esta duplicando ou triplicando

basicamente algumas das ultimas linhas do arquivo acabam sendo duplicadas ou triplicadas e eu não consigo resolver o problema

Meu código:

using System.Text;

string EnderecoDoArquivo = "Arquivo.txt";
byte[] buffer = new byte[1024]; //1kb
var numeroDeBytesLidos = -1;
FileStream fs = new FileStream(EnderecoDoArquivo, FileMode.Open);
while (numeroDeBytesLidos != 0)
{
    numeroDeBytesLidos = fs.Read(buffer, 0, buffer.Length);
    LerBytes(buffer);
}
Console.Read();
void LerBytes(byte[] buffer)
{
    Encoding E_string = Encoding.Default;
    string textoDoArquivo = E_string.GetString(buffer);
    Console.Write(textoDoArquivo);
}
1 resposta

Olá Dhonatan, tudo bem?

Uma possível causa para esse problema é que você está lendo mais bytes do que o necessário para cada iteração do loop. Isso ocorre porque você está usando o método fs.Read(buffer, 0, buffer.Length) para ler os bytes do arquivo, mas não está levando em consideração o número de bytes lidos retornados por esse método.

Você pode tentar verificar o número de bytes lidos a cada iteração do loop e usar apenas esses bytes para criar a string. Você pode fazer isso usando o método Encoding.GetString(buffer, 0, numeroDeBytesLidos) em vez de Encoding.GetString(buffer):

using System;
using System.IO;
using System.Text;

string EnderecoDoArquivo = "Arquivo.txt";
byte[] buffer = new byte[1024]; //1kb
var numeroDeBytesLidos = -1;
FileStream fs = new FileStream(EnderecoDoArquivo, FileMode.Open);
while (numeroDeBytesLidos != 0)
{
    numeroDeBytesLidos = fs.Read(buffer, 0, buffer.Length);
    LerBytes(buffer, numeroDeBytesLidos);
}
Console.Read();

void LerBytes(byte[] buffer, int numeroDeBytesLidos)
{
    Encoding E_string = Encoding.Default;
    string textoDoArquivo = E_string.GetString(buffer, 0, numeroDeBytesLidos);
    Console.Write(textoDoArquivo);
}

Espero que isso resolva o problema das linhas duplicadas. Se você tiver alguma outra dúvida, é só me dizer! Espero ter ajudado e bons estudos!