【发布时间】:2019-01-08 16:58:13
【问题描述】:
我有带过滤器的 openFileDialog 和 saveFileDialog(只有 .dvbcfg 扩展名):
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "DVB Configuration File (*.dvbcfg)|*.dvbcfg";
saveFileDialog.DefaultExt = "dvbcfg";
saveFileDialog.AddExtension = true;
它可以正常工作,但是当我尝试手动输入文件名时,它会显示带有任何扩展名的文件(没有过滤)并打开/保存它们(第一个 - 打开文件,第二个 - 保存文件): ScreenShot
如何仅显示匹配saveFileDialog.Filter的文件?
附注我在 saveFileDialog 中有覆盖功能。
UPD我有另一个选项 - 当用户选择错误的文件类型时抛出异常,但我不知道如何从 saveFileDialog.FileName 字符串中仅获取文件扩展名。
【问题讨论】:
-
我认为你做不到。您始终可以在文件名文本字段中输入
*.*,然后按回车键,这将显示当前目录中的所有文件,完全忽略过滤器下拉菜单。 -
问题是使用错误的文件可能会损坏昂贵的设备(本例中为 DVB-3030 数字调制器),即使我使用 try/catch 从文件中获取变量(它们需要整数,在尝试段中,我有 Convert.ToInteger32) 和 if/else 检查中的变量范围(例如,频率范围应为 10MHz - 90 MHz,步长为 100Hz)。由于程序将被学生使用,他们可以故意尝试破坏它。
-
@NaiLeD 您可以通过验证选定的文件名和内容轻松避免这种情况。无论如何,即使您信任您的用户,您也必须这样做
标签: c# filter openfiledialog savefiledialog