0

文字列を暗号化してバイナリ ファイルに書き込もうとしています。プロセスを逆にしたい。ここに私が持っているコードがありますが、動作しません。

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();

それの何が問題なのですか??

4

2 に答える 2

6

SaveFileDialog.OpenFileすでに Stream オブジェクトを返します。.ToString()ファイル名/完全なファイルパスを提供する場合と提供しない場合がある奇妙な呼び出しは必要ありません。

基本的に、コードは 2 つのストリームを作成します。1 つは FileOpenDialog で指定された場所にあり、もう 1 つは "Stream.ToString()" の結果と等しいファイル名を持つ相対パスのどこかにあります。最初のストリーム (おそらく見ているもの) は、何も書き込んでいないため、空になります。

注:より安全なコードを作成するためusing(...)、手動.Close呼び出しの代わりに使用することを検討してください (例外が発生した場合にストリームを非処理のままにすることはありません)。

于 2012-06-08T22:35:00.683 に答える
2

ストリームを閉じる前に、次のようにフラッシュします。

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

別の方法として、writer.AutoFlush書き込みを開始する前に true に設定することもできますが、少し遅くなる可能性があります。

于 2012-06-08T22:33:02.947 に答える