Просто чтение и запись файла в C# повреждают данные - PullRequest
0 голосов
/ 17 апреля 2020

Я был бы очень рад, если бы кто-нибудь помог мне решить эту проблему. У меня есть файл с некоторыми данными, в которых я не уверен, но я предполагаю, что формат данных - UFT8, и я читаю его в C# и без каких-либо изменений записываю его обратно в файл, но затем данные в файле становятся поврежденными .

Вот мой вывод файла из NotePad ++ с кодировкой UTF8: enter image description here

Затем я читаю его и без изменений записываю его обратно в файл, но когда Я снова открываю его в Блокноте ++. Я вижу этот вывод: enter image description here

Вот мой код для чтения и записи, написанный на C#:

private void btnRead_Click(object sender, RoutedEventArgs e)
{
    var fs = new FileStream(path + name, FileMode.Open, FileAccess.Read);
    var br = new BinaryReader(fs);
    buffer = br.ReadBytes((int)fs.Length);
    MyTextBox.Text = Encoding.UTF8.GetString(buffer);
}

private void btnWrite_Click(object sender, RoutedEventArgs e)
{
    var bw = new BinaryWriter(new FileStream(path + name + ".modified", FileMode.Create));
    bw.Write(BytesToString(buffer));
    bw.Close();
}

static string BytesToString(byte[] bytes)
{
    using (MemoryStream stream = new MemoryStream(bytes))
    {
        using (StreamReader streamReader = new StreamReader(stream))
        {
            return streamReader.ReadToEnd();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Итак, я нашел, где была моя проблема. На самом деле я читаю файл в двоичном виде, но когда я записываю его обратно, я преобразую двоичный файл в строку и причины проблемы. Поэтому, если я просто воспользуюсь приведенным ниже кодом, все будет работать нормально, потому что во время написания он не будет преобразовывать двоичный файл в строку:

private void btnWrite_Click(object sender, RoutedEventArgs e){
  var bw = new BinaryWriter(new FileStream(path + name + ".modified", FileMode.Create));
        bw.Write(buffer);}
0 голосов
/ 17 апреля 2020

Используйте Stream Reader или Stream Writer вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...