可以二进制文件读取和的StreamReader和StreamWriter writen能解​​决吗?二进制文件、StreamReader、StreamWriter、writen

2023-09-05 04:36:48 作者:我听闻你始终一个人

如果我读,写使用的StreamReader和StreamWriter一个二进制文件,可以将文件修复?

  //原始code  - 堕落的目标文件
使用(流responseStream = response.GetResponseStream())
{
    使用(StreamReader的读者=新的StreamReader(responseStream))
    {
        使用(StreamWriter的作家=新的StreamWriter(目的地文件,FALSE))
        {
            writer.Write(reader.ReadToEnd());
        }
    }
}


//新的code  - 目标文件是好的
使用(流responseStream = response.GetResponseStream())
{
    使用(的FileStream FS = File.Create(目的地文件名))
    {
        responseStream.CopyTo(FS);
    }
}
 

解决方案   

如果我读,写使用的StreamReader和StreamWriter一个二进制文件,可以将文件修复?

那要看什么的文件中。如果它的实际上的在正确的编码文本,那么你就不会失去任何东西。

如果这是真正的二进制数据(如JPEG),那么你会的几乎可以肯定的已丢失的信息,无可挽回。只是不这样做,如果你已经做到了,我可能不会尝试修理的文件 - 我会写他们看成是坏

如果你使用ISO-8859-1,它可能是所有的会都得到了很好 - 虽然它仍然一直不好code这将是更好变

If I read and wrote a binary file using StreamReader and StreamWriter, can the file be repaired?

// 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);
    } 
}

解决方案

If I read and wrote a binary file using StreamReader and StreamWriter, can the file be repaired?

It depends what's in the file. If it's actually text in the right encoding, then you won't have lost anything.

If it's genuinely binary data (e.g. a JPEG) then you'll almost certainly have lost information, irreparably. Just don't do it, and if you've already done it, I probably wouldn't try to "fix" the files - I'd write them off as "bad".

If you'd used ISO-8859-1, it's possible that all would have been well - although it would still have been bad code which would be better off changed.