2016-07-12 28 views
0

この問題の可能性のあるさまざまな方法を調べましたが、これをまだ修正していないものは見つかりませんでした。C#SaveFileDialogキャンセルをクリックすると例外がスローされます

すべてが正常に機能し、SaveFileDialogボックスがポップアップし、[キャンセル]をクリックすると例外がスローされます。

私のコードは以下の通りです:

using (StreamWriter sw = new StreamWriter(saveFileDialog1.OpenFile())) 

それはtextResultが、それはからのテキストを読んでいるtextboxであると言います。この行:

private void createNewFile_Click(object sender, RoutedEventArgs e) 
{ 
    Microsoft.Win32.SaveFileDialog saveFileDialog1 = new Microsoft.Win32.SaveFileDialog(); 
    saveFileDialog1.FileName = "New Note"; //default file name 
    saveFileDialog1.DefaultExt = ".txt"; //default file extension 
    saveFileDialog1.Filter = "Text Files (.txt)|*.txt"; //filter files by extension 
    saveFileDialog1.ShowDialog(); //bring up the Dialog box 

    if(saveFileDialog1.FileName != "") 
    { 
     using (StreamWriter sw = new StreamWriter(saveFileDialog1.OpenFile())) 
     { 
      sw.Write(textResult.Text); 
     } 
    } 

} 

それが上のエラーをスローラインはこの1つですTXTファイルに保存

sw.Write(textResult.Text); 

例外がスローしています

"An unhandled exception of type 'System.ArgumentException' occured in mscorlib.dll" 

"Additional information: Absolute path information is required" 
+0

何が例外ですか? – BugFinder

+0

ファイル名の代わりに 'ShowDialog'の結果をテストしてください:'(saveFileDialog1.ShowDialog()== true){using(...)...} ' – Dennis

答えて

2

StreamWriterを使用する前にユーザーが実際に「保存」をクリックしたことを検証する必要があります。 また、あなたの条件:あなたが行だけのカップルその上FileNameプロパティを設定するよう

if(saveFileDialog1.FileName != "") 

は常にtrueになります。

代わりにこれに変更します。ユーザーは、ユーザーはそれがfalseを返しますし、ユーザーがボックスを閉じた場合、結果はしません「キャンセル」をクリックした場合、それは、trueを返します「保存」をクリックした場合

var result = saveFileDialog1.ShowDialog(); 

if(result.HasValue && result.Value) 

価値がある。

詳細情報:代わりにif(saveFileDialog1.FileName != "")https://msdn.microsoft.com/en-us/library/dd491101(v=vs.95).aspx

+0

結果は' bool? 'なのでコンパイルされません。 「ブール」ではない。ユーザがシステムメニューを介してダイアログを閉じると、結果は「ヌル」になります。 – Dennis

+0

@Dennisはい申し訳ありませんが、ちょうどそれを編集しようとしていました。 –

+0

これは私がsaveFileDialog1.ShowDialog()を削除する必要があることを意味しますか?上のビットから? –

0

if(saveFileDialog1.DialogResult == DialogResult.OKを試してみてください)

この場合、あなたはそれを保存するクリックすると、クリックした場合、それは遠くに行動せずにダイアログを閉じますキャンセルのStreamWriterしprocceedます。

関連する問題