如何使用SaveFileDialog将字节数组写入文件?

时间:2011-09-28 08:40:16

标签: c# .net arrays byte

基本上我有一个创建字节数组的程序(通过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); 
         }


     }

3 个答案:

答案 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