[英]how can i write a byte array to a file using a SaveFileDialog?
基本上,我有一个创建字节数组的程序(通常通过Richtextbox输入,我希望能够创建一个新文件,并通过SaveFileDialog()方法将字节保存在该文件中。
我想出的代码是:
byte[] bytes = Encoding.ASCII.GetBytes(richTextBox1.Text);
Stream stream = new MemoryStream(bytes);
SaveFileDialog file = new SaveFileDialog();
file.ShowDialog();
if (file.FileName != "")
{
using (BinaryWriter bw = new BinaryWriter(stream))
{
bw.Write(bytes);
}
}
您说已经有了“通过Richtextbox手动输入”的字节-但您只是在获取文本的ASCII编码值。 如果您期望解析(例如)解析十六进制,那么您会感到失望。 它真不明白你想要做什么,但如果你要保存的文本,你并不需要将其转换为字节数组自己。
接下来,您当前正在写入MemoryStream
,因此显然不会保存到文件...如果您真的想这样做,则应改用FileStream
(直接构造或通过File.OpenWrite
等构造)。 但是,您不需要自己做所有的工作...
保存一堆字节的最简单方法是:
File.WriteAllBytes(file.FileName, bytes);
保存字符串的最简单方法是:
File.WriteAllText(file.FileName, text); // Optionally specify an encoding too
您可以使用File.WriteAllText方法来简单地做到这一点:
SaveFileDialog file = new SaveFileDialog();
file.ShowDialog();
if (file.FileName != "")
{
File.WriteAllText(file.FileName, richTextBox1.Text);
}
您应该使用FileInfo来读取/写入文件。 因此,您可以在访问前进行更多检查。 按照已经完成的步骤创建ByteArray,以便您可以确定编码方式,并且对将来很安全。 通过使用DialogResult来检查用户的响应,然后交叉检查结果FileName。 请不要忘记,也许文件已经存在,并且用户想要覆盖或附加它:-)
SaveFileDialog file = new SaveFileDialog();
DialogResult dialogResult = file.ShowDialog();
if (dialogResult == DialogResult.OK) {
if (String.IsNullOrEmpty(file.FileName)) {
//Inform the user
}
string path = file.FileName;
FileInfo fi = new FileInfo(path);
// Open the stream for writing.
using (FileStream fs = fi.OpenWrite()) {
Byte[] info = Encoding.ASCII.GetBytes(richTextBox1.Text);
// Add some information to the file.
fs.Write(info, 0, info.Length);
}
} else {
//Inform the user
}
有关FileInfo的更多信息: http : //msdn.microsoft.com/zh-cn/library/system.io.fileinfo.aspx
有关OpenWrite方法的更多信息: http : //msdn.microsoft.com/zh-cn/library/system.io.fileinfo.openwrite.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.