C# WPF - 仅允许特定的文件扩展名

4

我有一个OpenFileDialog,我只想让用户选择.txt格式的文件。

我知道可以像这样向OpenFileDialog添加Filter

var dialog = new OpenFileDialog();
dialog.DefaultExt = ".txt";
dialog.Filter = "Text Files (*.txt)|*.txt";
var result = dialog.ShowDialog();
// Do something with the result

然而问题在于,我仍然可以直接在 OpenFileDialog 中输入像 "test.jpg" 这样的内容,然后它就会上传这个 .jpg 文件。(显然,以后可能会出现问题,但暂且不论。)我只想知道如何限制用户只能添加 ".txt" 文件,其他的都不行?(通过直接在 OpenFileDialog 中验证它,而不是之后再进行验证。)


2
我不确定是否有一种方法可以“防止”用户通过输入更改扩展名,但是您可以在他们选择文件后立即检查扩展名,并在其非法时报告错误。 - Arian Motamedi
我认为你的选择要么是在用户选择文件后检查扩展名,要么是编写自己的文件对话框。 - juharr
您是否希望用户选择除 .txt 以外的所有内容? - daniele3004
请更清楚地表达问题,这样我才能更好地帮助您。 - daniele3004
“Filter” 功能仅用于限制文件列表,以便用户可以轻松选择正确类型的文件。除非您有一些库帮助您检测几乎所有常见的文件结构(通过读取内容而不仅仅是基于扩展名),否则您无法防止用户伪造文件扩展名并打开它。 - King King
1个回答

5

你不能仅在 OpenFileDialog 中这样做,即使你可以这样做,这也是一个很糟糕的限制。

*.txt 为例,有多个纯文本文件扩展名,例如 *.bat 或所有编码文件扩展名 *.cs*.js 等等……

你不应该限制用户可以放置的文件类型。

对于更复杂的文件类型,如果你的程序无法处理用户传递的文件,你应该显示错误而不是阻止用户传递文件。


好的,那我就继续使用过滤器。目前如果内容格式不正确,它不会对内容做任何处理,我只是想知道像 .bat 或 .exe 这样的文件是否会在注入时造成危害,并希望通过限制用户可以输入的内容来防止这些类型的文件。 - Kevin Cruijssen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接