2017-02-14 13 views
0

ファイル名を変更してもう一度保存しようとすると、他のプログラムで使用中のファイルに書き込むときにsavefilediallogを開いたままにするにはどうすればよいですか?Savefiledialogロックされたファイル、ファイル名を変更する

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

多分[this](http://stackoverflow.com/questions/3846646/exception-in-opening-a-file-that-is-already-open)あなたを助けることができます。 –

+0

あなたはそうしてはいけません。唯一の方法は、別の名前を取り消すか、または別の名前を選ぶことです。多くのマウスクリックを作成することなく効率的に警告することは面倒になるかもしれません... –

+2

そのための確立されたUXパターンユーザーに最初に、ファイルが書き込みのためにロックされている(理想的には、誰によって/どのプロセスによって)のかをフィードバックすることです。そのメッセージには取り消しまたは再試行のオプションがあり、再試行でsavefiledialogを再び開くことができます。同じインスタンスを再利用すると、最後に選択したパスとファイル名が保持されるため、ユーザーの手間は軽減されます。 – dlatikay

答えて

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

はEDIT:さらに検討では、私はあなたが/ここでループを必要としたくないと思うので、私は削除しましたそれ。あなたはまだしかし、例外の場合には、ここで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につながることができます(と私は何千回を意味します)例外はありますが、それはほとんど起こりません。

関連する問題