简体   繁体   中英

Savefiledialog locked file, change file name

How to keep the savefilediallog open when you write to a file which is in use by an other program so that you can change the file name and try to save again?

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 ???
    }
}

Try this. Move the code associated with opening the saveFileDialog1 into its own function and invoke that function from 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();
}

EDIT: On further consideration, I don't think you want/need the loop here, so I've removed it. You still want to invoke the ShowSaveFileDialog method here in case of exceptions, though:

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();
}

Technically, this can probably lead to a StackOverflowException if the user tries repeatedly (and I mean thousands of times) to retry the save after an exception, but that's pretty unlikely.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM