我已经在winforms中打开了文件对话框。它设置为只读 .xml 文件。
ofd.DefaultExt="xml";
ofd.Filter="XML Files|*.xml";
但是当我运行它时,它允许上传 .htm 文件快捷方式。而它根本不应该显示 .htm 文件。
我已经在winforms中打开了文件对话框。它设置为只读 .xml 文件。
ofd.DefaultExt="xml";
ofd.Filter="XML Files|*.xml";
但是当我运行它时,它允许上传 .htm 文件快捷方式。而它根本不应该显示 .htm 文件。
你做对了。使用该Filter
属性可以将打开对话框中显示的文件限制为仅指定的类型。在这种情况下,用户将在对话框中看到的唯一文件是带有.xml
扩展名的文件。
但是,如果他们知道自己在做什么,那么用户绕过过滤器并选择其他类型的文件是微不足道的。例如,他们可以只输入完整的名称(如果需要,还可以输入路径),或者他们可以输入一个新的过滤器(例如*.*
)并强制对话框向他们显示所有此类文件。
因此,您仍然需要逻辑来检查并确保所选文件符合您的要求。使用该System.IO.Path.GetExtension
方法从选定的文件路径中获取扩展名,并与预期路径进行不区分大小写的序数比较。
例子:
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "XML Files (*.xml)|*.xml";
ofd.FilterIndex = 0;
ofd.DefaultExt = "xml";
if (ofd.ShowDialog() == DialogResult.OK)
{
if (!String.Equals(Path.GetExtension(ofd.FileName),
".xml",
StringComparison.OrdinalIgnoreCase))
{
// Invalid file type selected; display an error.
MessageBox.Show("The type of the selected file is not supported by this application. You must select an XML file.",
"Invalid File Type",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
// Optionally, force the user to select another file.
// ...
}
else
{
// The selected file is good; do something with it.
// ...
}
}