0

我到处找,找不到我要找的东西。我想要的是“保存”菜单(不是“另存为...”)上的 saveToolStripMenuItem_Click 事件处理程序的代码,并让我的应用程序检查是否:

  1. 当前文件已保存,因此已有文件名。

  2. 当前文件自打开后已被修改。

  3. 覆盖(或根据需要附加)现有文件,而不打开“另存为”对话框。

  4. 如果文件不存在,则显示“另存为...”菜单。

我的“另存为...”菜单已经正常工作。我发现的所有内容都告诉我如何创建我已经知道的“另存为..”对话框。我下载的每个示例程序都没有这个功能。

任何帮助,将不胜感激。

4

2 回答 2

1

第 1 点是您的解决方案,真的。

您必须保留一个Filename字符串变量来保存当前文档的文件名。如果您创建一个新文档,Filename则为null. 然后,如果单击SaveSave As...并且用户没有取消对话框,则将结果存储FileDialog.FileNameFilename变量中,然后写入文件内容。

现在,如果用户再次单击Save,您检查是否Filename有值,如果有,则不要显示,SaveFileDialog而只是再次写入文件。

然后,您的代码将如下所示:

private String _filename;

void saveToolStripMenuItem_Click()
{
    if (String.IsNullOrEmpty(_filename))
    {
        if (ShowSaveDialog() != DialogResult.OK)
        {
            return;
        }
    }

    SaveCurrentFile();
}

void saveAsToolStripMenuItem_Click()
{
    if (ShowSaveDialog() != DialogResult.OK)
    {
        return;
    }

    SaveCurrentFile();
}

DialogResult ShowSaveDialog()
{
    var dialog = new SaveFileDialog();
    // set your path, filter, title, whatever
    var result = dialog.ShowDialog();

    if (result == DialogResult.OK)
    {
        _filename = result.FileName;
    }

    return result;
}

void SaveCurrentFile()
{
    using (var writer = new StreamWriter(_filename))
    {
        // write your file
    }
}
于 2012-07-11T09:21:03.667 回答
0

您可以通过使用编写自定义来实现作为要点提到的要求

System.IO.FileOptions 和 System.IO.File 方法

http://msdn.microsoft.com/en-us/library/system.io.file_methods

于 2012-07-11T09:16:29.117 回答