将SaveFileDialog替换为代码保存

本文关键字:代码 保存 替换 SaveFileDialog | 更新日期: 2023-09-27 18:03:48

我有这样的代码保存bin文件,但用户必须选择文件

         Stream myStream;
         SaveFileDialog saveFileDialog1 = new SaveFileDialog();
        saveFileDialog1.Filter = "Binary File (*.bin)|*.bin";
        saveFileDialog1.FilterIndex = 2;
        saveFileDialog1.RestoreDirectory = true;
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if ((myStream = saveFileDialog1.OpenFile()) != null)
            {
                Question.PersistObject(questions, myStream);
                myStream.Close();
            }
        }

但是我想在代码中选择file,如果文件名不存在,那么创建它。如何在myStream中设置该文件?

将SaveFileDialog替换为代码保存

将所有与OpenFileDialog相关的逻辑替换为File.Open:

using (var myStream = File.Open(someFilePath, FileMode.OpenOrCreate))
{
    Question.PersistObject(questions, myStream);  // do something with the stream
}

如果文件存在,OpenOrCreate文件模式将打开该文件,如果文件不存在,则创建该文件。

using语句将为您关闭流。

一种选择是有一个基本名称并附加一个数字:

string templateName = "myfile{0}.bin";
string finalName;
int count = 0;
do {
    finalName = String.Format(templateName, count++);
} while (File.Exists(finalName);

或者,如果您不关心名称,则使用Path。GetTempFileName

然后将该名称传递给StreamWriter:

 using (StreamWriter writer = new StreamWriter(finalName))
 {
      // Write stuff
 }