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

Posted

技术标签:

【中文标题】从 SaveFileDialog 创建、写入和打开文本文件【英文标题】:Create, write to and open a text file from SaveFileDialog 【发布时间】:2012-09-05 13:57:22 【问题描述】:

我正在显示一个 SaveFileDialog,当单击 OK 时,我正在创建新文件,向其中写入一些默认内容,然后尝试通过 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()  );

有人可以解释为什么会发生这种情况以及我需要做什么才能成功打开新创建的文件吗?

【问题讨论】:

请提供事件代码,这可能是哪里出了问题。 您为什么要为此流程使用事件?它们将是异步的,你不能保证它们的顺序 【参考方案1】:

根据MSDN, SaveFileDialog.OpenFile()

注意

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

【讨论】:

是的,这就是我所做的。在 NewFileCreated 事件中创建文件,然后在 FileLoaded 事件中使用文件类打开它 所以,如果你想在不破坏现有内容的情况下打开文件,你需要通过 FileStream 类打开它并将 FileMode.Append 传递给适当的 ctor。

以上是关于从 SaveFileDialog 创建、写入和打开文本文件的主要内容,如果未能解决你的问题,请参考以下文章

saveFileDialog 停止工作 + 从 Internet 下载文件

Winform SaveFileDialog Word

C# OpenFileDialog和SaveFileDialog:打开文件与保存文件

使用SaveFileDialog将数据保存到文本文件?

在 Silverlight SaveFileDialog 中打开文件而不是保存文件

WPF借助SaveFileDialog实现文件存储