C# SaveFileDialog 不创建文件也不会关闭

C# SaveFileDialog doesn't create a file and won't close

首先我要指出,我是 C# 的完全初学者,我一直在尝试“边做边学”。

整个项目是一个媒体播放器,我正在从我一直在观看的几个 YouTube 视频中创建和扩充它。我现在想了解 SaveFileDialog 以及如何将项目从 ListBox 保存到 xml 文件中。

然而,在我到达那里之前,我无法让 SaveFileDialog 保存所有内容然后关闭。

这是我正在使用的代码:

 public Form1()
        {
            InitializeComponent();
        }
        
        private void btn_save_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "XML-File | *.xml";
            saveFileDialog1.Title = "Save Playlist";
            saveFileDialog1.ShowDialog();

            if (saveFileDialog1.ShowDialog() == DialogResult.OK) ;
        }

现在,当我单击“保存”按钮 (btn_save) 时,“保存”对话框将打开,默认为 xml 文件,但单击“保存”后不会保存任何文件,然后单击“保存”后,对话框会一次又一次打开,直到我 select 取消。

如果我尝试添加 SaveFileDialog.Close(); 我收到一条错误消息,指出“SaveFileDialog”不包含 'Close' 的定义,但我想我必须设置 something 告诉对话框在点击保存后关闭。

这里对我最有帮助的是对此的“修复”,然后是代码中的一些注释,解释每一行发生的事情,以便我执行更多相关搜索并进一步阅读。

也就是说,我们将不胜感激。如果我需要在此示例中包含其他代码,请告诉我。

我希望将“hello world”写入文本文件的代码如下所示:

private void btn_save_Click(object sender, EventArgs e)
{
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "Text file | *.txt";
    saveFileDialog1.Title = "Save Playlist";
    
    if (saveFileDialog1.ShowDialog() != DialogResult.OK) 
      return;

    File.WriteAllText(saveFileDialog1.FileName, "hello world");
}

您可以针对 XML 等进行调整,但关键概念是:

  • 使用 ShowDialog() 显示对话框 - 您的代码将在对话框打开时暂停并在对话框关闭时恢复
  • 检查结果,如果结果不正常(即用户单击“取消”),return什么都不做
  • 否则,做点什么(比如写一个文件)

您实际上需要使用从 SaveFileDialog 组件获取的信息来保存文件。

也许这对您有帮助:

public Form1()
{
  InitializeComponent();
}

private void btn_save_Click(object sender, EventArgs e)
{
  Stream myStream ;
  SaveFileDialog saveFileDialog1 = new SaveFileDialog();
  saveFileDialog1.Filter = "XML-File | *.xml";
  saveFileDialog1.Title = "Save Playlist";
  saveFileDialog1.ShowDialog();

  if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
  {
    if((myStream = saveFileDialog1.OpenFile()) != null)
    {
      // Code to write the stream goes here.
      myStream.Close();
    }
  } //end if ShowDialog
} //end Click Button