StreamReader 和 StreamWriter 读写的二进制文件是否可以修复

本文关键字:是否 二进制文件 StreamWriter 读写 StreamReader | 更新日期: 2023-09-27 18:37:10

如果我使用 StreamReader 和 StreamWriter 读取并写入二进制文件,该文件可以修复吗?

// Original Code - Corrupted the Destination File
using (Stream responseStream = response.GetResponseStream())
{
    using (StreamReader reader = new StreamReader(responseStream))
    {
        using (StreamWriter writer = new StreamWriter(destinationFileName, false))
        {
            writer.Write(reader.ReadToEnd());
        }
    }
}

// New Code - Destination File is Good
using (Stream responseStream = response.GetResponseStream())
{
    using (FileStream fs = File.Create(destinationFileName))
    {
        responseStream.CopyTo(fs);
    } 
}

StreamReader 和 StreamWriter 读写的二进制文件是否可以修复

如果我使用 StreamReader 和 StreamWriter 读取和写入二进制文件,该文件可以修复吗?

这取决于文件中的内容。如果它实际上是正确编码的文本,那么您不会丢失任何东西。

如果它是真正的二进制数据(例如JPEG),那么您几乎肯定会丢失信息,这是无法弥补的。只是不要这样做,如果你已经这样做了,我可能不会尝试"修复"这些文件 - 我会把它们写成"坏"。

如果您使用了ISO-8859-1,则可能一切都会很好 - 尽管它仍然是糟糕的代码,最好更改。

尝试使用 StreamReader 读取它,看看你返回的字符串是否有意义。这是恢复数据的最佳选择。一旦你有一个"正确"的字符串,你需要尝试不同的编码来写入二进制文件。尝试 UTF8、UTF16 和 Encoding.Default。

我想恢复一些

数据需要一些时间。请注意,您很可能已经永久丢失了其中的一些。