2

如果我使用 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);
    } 
}
4

2 回答 2

3

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

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

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

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

于 2012-06-13T21:05:34.827 回答
0

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

我想恢复一些数据需要一些时间。请注意,您可能已经永久丢失了其中的一部分。

于 2012-06-13T21:07:23.297 回答