2012-06-13 51 views
2

如果我使用StreamReader和StreamWriter讀取和寫入二進制文件,可以修復該文件嗎?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); 
    } 
} 

回答

3

如果我讀,寫使用的StreamReader和StreamWriter一個二進制文件,可以把文件進行修復?

這取決於什麼是在文件中。如果它的實際上是文本中的正確編碼,那麼你將不會丟失任何東西。

如果它是真正的二進制數據(例如JPEG),那麼幾乎可以肯定已經失去了信息,無法挽回。只是不這樣做,如果你已經做到了,我可能不會試圖「修復」這些文件 - 我會把它們寫成「壞」的。

如果你使用ISO-8859-1,可能所有的都會很好 - 儘管它仍然是不好的代碼,它會更好。

0

試着用StreamReader讀取它,看看你回來的字符串是否有意義。這是恢復數據的最佳選擇。一旦你有一個「正確的」字符串,你需要嘗試不同的編碼來寫入二進制文件。試試UTF8,UTF16和Encoding.Default。

我想它會花費一些時間來恢復一些數據。請注意,您可能永久丟失了一些。

相關問題