基本上我有一个创建字节数组的程序(通过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);
}
}
答案 0 :(得分:4)
你说你有“通过richtextbox手动输入的字节” - 但你只是得到了文本的ASCII编码值。如果你期望(比如说)解析十六进制,那么你会感到失望。目前还不是很清楚你要做什么,但是如果你 试图保存文本,你不需要自己将它转换为字节数组。
接下来,你正在写一个MemoryStream
,所以它显然不会保存到文件中...如果你真的想要这样做,你应该使用FileStream
代替(要么直接构建,要么通过File.OpenWrite
等构建。但是,您不需要自己完成所有工作......
保存一堆字节的最简单方法是:
File.WriteAllBytes(file.FileName, bytes);
保存字符串的最简单方法是:
File.WriteAllText(file.FileName, text); // Optionally specify an encoding too
答案 1 :(得分:1)
只需使用File.WriteAllText方法即可完成此操作:
SaveFileDialog file = new SaveFileDialog();
file.ShowDialog();
if (file.FileName != "")
{
File.WriteAllText(file.FileName, richTextBox1.Text);
}
答案 2 :(得分:0)
您应该使用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/en-us/library/system.io.fileinfo.aspx
有关OpenWrite方法的更多信息: http://msdn.microsoft.com/en-us/library/system.io.fileinfo.openwrite.aspx