public void Saved()
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "文本文档(*.txt)|*.txt|文档(*.doc)|*.doc";
                sfd.RestoreDirectory = true;
                if(sfd.ShowDialog() == DialogResult.OK)
                {
                    string fileName = sfd.FileName;
                    SaveFile(fileName);
                }            
            }
            public void SaveFile(string fileName)
            {
                try
                {
                    using (FileStream fs = File.OpenWrite(fileName))
                    {
                        using (StreamWriter sw = new StreamWriter((Stream)fs,Encoding.UTF8))
                        {
                            sw.Write(sb.ToString());
                        }
                    }
                }
                catch (IOException ex)
                {
                    MessageBox.Show(ex.Message, "Simple Editor", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }

解决方案 »

  1.   

    就是sb里面的内容写入文件是成功的
    另外,也不是非要用StreamWriter using (FileStream fs = File.OpenWrite(fileName))
                    {
                        fs.Write(Encoding.UTF8.GetBytes(sb.ToString()), 0, Encoding.UTF8.GetBytes(sb.ToString()).Length);
                     }写入文件没发现问题
      

  2.   

    你要做的是在
    sw.Write(sb.ToString());这句断点看看sb的是否有值,是否在其他地方被修改或者初始化了
      

  3.   

    这就奇怪了,难道是我那个sb是空的?但是我用绝对路径存储的时候也是用的这个sb,是有内容的
      

  4.   

    1L的意思是他自己定义一个StringBuild 然后是可以写入的  你的快速理解能力有限啊 哈哈
      

  5.   

    调试了一下,sb不是空的,不过我是用控制台程序调试的。另外我也试过另一种保存方式,能正常输出
    FileStream fs = new FileStream("输出.txt", FileMode.Create, FileAccess.Write);
    StreamWriter sw = new StreamWriter((Stream)fs, Encoding.UTF8);
    sw.Write(sb.ToString());
    sw.Flush();
    sw.Dispose();
    sw.Close();
    fs.Dispose();
    fs.Close();
    用这种方式是可以输出的,且输出的内容跟预测的sb的内容是一样的。为什么用SaveFileDialog就输出是空的呢,纠结了!!!求大神指教啊