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 个流:一个位于 FileOpenDialog 中指定的位置,另一个位于相对路径的某个位置,文件名等于“Stream.ToString()”的结果。第一个流(您可能正在查看的流)将是空的,因为您没有向其写入任何内容。

注意:考虑使用using(...)而不是手动.Close调用,因为它会创建更安全的代码(如果发生异常,您不会让流未处理)。

于 2012-06-08T22:35:00.683 回答
2

在关闭流之前,像这样刷新它。

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

或者,您可以writer.AutoFlush在开始编写之前设置为 true,但这可能会稍微慢一些。

于 2012-06-08T22:33:02.947 回答