Я пытаюсь заставить SaveFileDialog
и FileOpenDialog
применить расширение к имени файла, введенному пользователем. Я попытался использовать образец, предложенный в question 389070, но это не работает должным образом:
var dialog = new SaveFileDialog())
dialog.AddExtension = true;
dialog.DefaultExt = "foo";
dialog.Filter = "Foo Document (*.foo)|*.foo";
if (dialog.ShowDialog() == DialogResult.OK)
{
...
}
Если пользователь вводит текст test
в папке, где существует файл test.xml
, диалоговое окно предложит имя test.xml
(тогда как я действительно хочу видеть только *.foo
в списке). Хуже того: если пользователь выберет test.xml
, то я действительно получу test.xml
в качестве имени выходного файла.
Как я могу убедиться, что SaveFileDialog
действительно позволяет пользователю выбирать только файл *.foo
? Или, по крайней мере, что он заменяет/добавляет расширение, когда пользователь нажимает Save
?
Предлагаемые решения (реализовать обработчик события FileOk
) выполняют только часть работы, так как я действительно хотел бы отключить кнопку Save
, если имя файла имеет неправильное расширение.
Чтобы остаться в диалоговом окне и обновить имя файла, отображаемое в текстовом поле в обработчике FileOk
, чтобы отразить новое имя файла с правильным расширением, см. следующий связанный вопрос.