2016-07-12 4 views
0

Я рассмотрел различные способы решения этой проблемы, но не нашел того, что исправлено.C# SaveFileDialog Нажатие на отмену выдает исключение

Все работает нормально, появляется окно SaveFileDialog, и вы можете нажать «Сохранить» без проблем, если вы нажмете «Отменить», оно вызывает исключение.

Мой код ниже:

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

} 

Линия он бросает ошибку на это один:

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

Эта линия, где он говорит, что textResult является textbox он читает текст от сохранить в файл TXT

sw.Write(textResult.Text); 

Исключение составляет бросок is

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

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

В чем исключение? – BugFinder

+0

Результат 'ShowDialog' вместо имени файла:' if (saveFileDialog1.ShowDialog() == true) {using (...) ...} ' – Dennis

ответ

2

Вам необходимо убедиться, что пользователь фактически нажал «Сохранить», прежде чем пытаться использовать StreamWriter. Кроме того, ваше состояние:

if(saveFileDialog1.FileName != "") 

всегда будет верно, как вы установите свойство FileName только пару строк над ним.

Вместо изменить это:

var result = saveFileDialog1.ShowDialog(); 

if(result.HasValue && result.Value) 

Если пользователь нажимает кнопку «Сохранить» он возвращает истину, если пользователь нажимает кнопку «Отменить» вернет ложь, и если пользователь закрывает окно, результат не будет имеют значение.

Дополнительная информация: https://msdn.microsoft.com/en-us/library/dd491101(v=vs.95).aspx

+0

Это не скомпилируется, так как результатом является' bool? ', не 'bool'. Когда пользователь закрывает диалог через системное меню, результатом является «null». – Dennis

+0

@ Dennis Да, простите, вот-вот изменит это. –

+0

Это означает, что мне нужно удалить saveFileDialog1.ShowDialog(); от бит выше? –

0

вместо if(saveFileDialog1.FileName != "") попробовать

if(saveFileDialog1.DialogResult == DialogResult.OK)

в этом случае, если вы нажмете сохранить это procceed в StreamWriter, если нажать отменить это закрыть окно без дальних действий ,

Смежные вопросы