2012-06-08 185 views
-1

我試圖加密一個字符串並將其寫入二進制文件。我想反過來做這個過程。這是我有的代碼,但它不起作用。使用C寫入二進制文件#

FileStream stream = new FileStream(saveFileDialog1.OpenFile().ToString(), FileMode.Create); 
BinaryWriter writer = new BinaryWriter(stream); 
String temp = ""; 
serialList.ForEach(delegate(record p) 
{ 
    temp = String.Format("{0},{1}#", p.serial, p.option); 
    byte[] dataB = System.Text.Encoding.Unicode.GetBytes(String.Format("{0},{1}#", p.serial, p.option)); 
    byte[] enc = Encrypt(dataB, "gio!"); 
    writer.Write(enc); 
}); 
writer.Write('1'); 
writer.Close(); 
stream.Close(); 

它有什麼問題?

+0

它是做什麼的? – zmbq

+0

@zmbq:創建一個空文件,就像問題所述。 –

+0

你甚至沒有'1'? – zmbq

回答

6

SaveFileDialog.OpenFile已經返回你Stream對象。你不需要奇怪的.ToString()調用,可能會或可能不會給你文件名/完整的文件路徑。

本質上,您的代碼創建2個流:一個位於FileOpenDialog中指定的位置,另一個位於相對路徑中,文件名等於「Stream.ToString()」的結果。第一個流(你可能看到的那個流)將是空的,因爲你沒有寫任何東西。

注意:考慮使用using(...)而不是手動.Close調用,因爲它會創建更安全的代碼(如果發生異常,您不會留下未處置的流)。

2

在關閉流之前,請像這樣刷新它。

writer.Flush(); 
writer.Close(); 

或者,您可以在開始寫入之前將writer.AutoFlush設置爲true,但可能會稍微慢一些。

+2

+0。合理的建議,但無操作:關閉執行沖洗。和使用'use'調用Dispose一樣(這會在這種情況下產生更好的代碼)。 –

+0

@AlexeiLevenkov:我想知道這件事,但給出的代碼表明它沒有被刷新。有趣。 –