我正在尝试加密字符串并将其写入二进制文件。我想反过来做这个过程。这是我的代码,但它不起作用。
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 :(得分:6)
SaveFileDialog.OpenFile
已经返回Stream对象。您不需要奇怪的.ToString()
调用,可能会也可能不会为您提供文件名/完整文件路径。
本质上,您的代码创建了两个流:一个位于FileOpenDialog中指定的位置,另一个位于相对路径的某个位置,文件名等于“Stream.ToString()”的结果。第一个流(你可能看到的那个)将是空的,因为你没有写任何东西。
注意:请考虑使用using(...)
而不是手动.Close
调用,因为它会创建更安全的代码(如果发生异常,您不会将流保留为非处理状态。)
答案 1 :(得分:2)
在关闭流之前,请像这样冲洗它。
writer.Flush();
writer.Close();
或者,您可以在开始编写之前将writer.AutoFlush
设置为true,但这可能会稍慢。