У меня есть следующий код C #, который использует SaveFileDialog и задает для свойства AddExtension значение true
:
var dialog = new SaveFileDialog();
dialog.AddExtension = true;
dialog.DefaultExt = "txt";
dialog.Filter = "Text files (*.txt)|*.txt|XML files (*.xml)|*.xml";
dialog.OverwritePrompt = true;
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
label1.Text = dialog.FileName;
}
И я 'мы проверили следующую комбинацию File name
и Save as type
диалогового окна.
File name | Save as type | label1.Text | What I expect
----------------+----------------+----------------+----------------
test1 | *.txt | test1.txt | test1.txt
test2.txt | *.txt | test2.txt | test2.txt
test3.abc | *.txt | test3.abc.txt | test3.abc.txt
test4 | *.xml | test4.xml | test4.xml
test5.xml | *.xml | test5.xml | test5.xml
test6.abc | *.xml | test6.abc.xml | test6.abc.xml
----------------+----------------+----------------+----------------
test7.xml | *.txt | test7.xml | test7.xml.txt
test8.bmp | *.txt | test8.bmp | test8.bmp.txt
test9.bmp | *.xml | test9.bmp | test9.bmp.xml
Для последних трех строк приведенной выше таблицы я бы ожидал двойное расширение, как это происходит для неизвестного abc
расширение.Такие приложения, как Microsoft Word, ведут себя так (они всегда добавляют двойное расширение, если Save as type
не соответствует расширению, заданному пользователем в File name
).
Есть ли способ изменить это?
Я не хочу делать это после закрытия диалогового окна, потому что тогда мне придется еще раз проверить, существует ли файл и не слишком ли длинное имя файла.
Обновление:
Я также протестировал его с платформой MONO, используя Ubuntu 18.04.В этом случае двойное расширение никогда не создается, например: test3.abc
с использованием MONO против test3.abc.txt
с использованием .NET Framework 4.5 (Windows 10).