Savefiledialog锁定文件,更改文件名

时间:2017-02-14 20:34:43

标签: c#

如何在写入其他程序正在使用的文件时保持savefilediallog打开,以便您可以更改文件名并尝试再次保存?

private void button1_Click_2(object sender, EventArgs e)
{
    Cursor.Current = Cursors.WaitCursor;
    CsvExport = Class_ExportData.DataTableToCSV(datatabelControle, csvSCheidingteken);
    Cursor.Current = Cursors.Default;

    saveFileDialog1.OverwritePrompt = true;

    saveFileDialog1.Filter = "Komma gescheiden waarden (*.csv)|*.csv|Tekst bestanden (*.txt)|*.txt|Alle formaten (*.*)|*.*";
    saveFileDialog1.DefaultExt = "csv";
    saveFileDialog1.AddExtension = true;
    saveFileDialog1.ShowDialog(); 
}

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    try
    {
        string name = saveFileDialog1.FileName; // Get file name.        
        File.WriteAllText(name, CsvExport);     // Write to the file name selected.
    }
    catch (Exception ex)
    {
        //file is locked, how to get back to the open save file dialog ???
    }
}

1 个答案:

答案 0 :(得分:1)

试试这个。将与打开saveFileDialog1相关联的代码移动到其自己的函数中,并从button1_Click调用该函数:

private void button1_Click_2(object sender, EventArgs e)
{
    Cursor.Current = Cursors.WaitCursor;
    CsvExport = Class_ExportData.DataTableToCSV(datatabelControle, csvSCheidingteken);
    Cursor.Current = Cursors.Default;

    ShowSaveFileDialog(); 
}

private void ShowSaveFileDialog()
{
    saveFileDialog1.OverwritePrompt = true;

    saveFileDialog1.Filter = "Komma gescheiden waarden (*.csv)|*.csv|Tekst bestanden (*.txt)|*.txt|Alle formaten (*.*)|*.*";
    saveFileDialog1.DefaultExt = "csv";
    saveFileDialog1.AddExtension = true;
    saveFileDialog1.ShowDialog();
}

编辑:进一步考虑,我认为你不想/需要循环,所以我删除了它。尽管如此,您仍然希望在此处调用ShowSaveFileDialog方法:

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    try
    {
        string name = saveFileDialog1.FileName; // Get file name.        
        File.WriteAllText(name, CsvExport);     // Write to the file name selected.
        return;
    }
    catch (Exception ex)
    {
        //file is locked, how to get back to the open save file dialog ???
        // maybe display an error message here so that the user knows why they're about to see the dialog again.
    }
    ShowSaveFileDialog();
}

从技术上讲,如果用户在异常后重复尝试(我的意思是数千次)重试保存,这可能会导致StackOverflowException,但这是不太可能的。