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 に答える