代码之家  ›  专栏  ›  技术社区  ›  Aydin Homay

用C#读写文件会损坏数据

  •  0
  • Aydin Homay  · 技术社区  · 5 年前

    如果有人能帮我解决这个问题,我会很高兴的。我有一个文件,里面有一些数据,我不确定,但我猜数据格式是UFT8,我用C#读取它,没有任何更改就把它写回文件中,但文件中的数据会损坏。

    这是我从NotePad++输出的UTF8编码的文件: enter image description here

    然后我正在读取它,并且没有任何更改地将其写回文件中,但当我在NotePad++中重新打开它时,我看到了以下输出: 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();
            }
        }
    }
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   Aydin Homay    5 年前

    所以我找到了我的问题所在。事实上,我正在读取二进制文件,但当我写回它时,我正在将二进制文件转换为字符串,这就是问题的原因。因此,如果我只使用下面的代码,一切都会正常工作,因为在编写过程中它不会将二进制转换为字符串:

    private void btnWrite_Click(object sender, RoutedEventArgs e){
      var bw = new BinaryWriter(new FileStream(path + name + ".modified", FileMode.Create));
            bw.Write(buffer);}
    
        2
  •  -3
  •   MohammadReza Arashiyan    5 年前

    使用 Stream Reader Stream Writer 相反。