从SaveFileDialog创建、写入和打开文本文件

3

我正在展示一个SaveFileDialog,当用户点击“确定”时我会创建一个新文件,并向其中写入一些默认内容,然后试图通过SaveFileDialog的OpenFile()方法打开它。但是,一旦我调用OpenFile()方法,文件的内容就被删除了。

SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "XML files (*.xml)|*.xml";
saveFileDialog.RestoreDirectory = true;

if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    // First Event Creates file and writes default content to it - works ok 
    NewFileCreated( this, new FileCreatedEventArgs() { Template = Template.BBMF, FilePath = saveFileDialog.FileName } );
    // Second Event clears file content as soon as saveFileDialog.OpenFile() called
    FileLoaded( this, new FileLoadedEventArgs() { FileStream = saveFileDialog.OpenFile() } );
}

有人能解释一下为什么会出现这种情况,以及我需要做些什么才能成功打开新创建的文件吗?

请提供事件的代码,可能是在那里出了问题。 - Gerald Versluis
为什么你要在这个流程中使用事件?它们将是异步的,你无法保证它们的顺序。 - Oskar Kjellin
1个回答

4

根据MSDN,SaveFileDialog.OpenFile()

注意

出于安全考虑,此方法使用读/写权限创建一个新文件并打开它。如果您选择要保存到的现有文件,则可能会导致意外数据丢失。要将数据保存到现有文件并保留现有数据,请使用File类使用FileName属性返回的文件名打开文件。


是的,这就是我所做的。在NewFileCreated事件中创建了文件,然后在FileLoaded事件中使用File类打开它。 - Stewart Alan
所以,如果你想打开文件而不破坏现有内容,你需要通过FileStream类打开它,并将FileMode.Append传递给适当的构造函数。 - Sam Axe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接