Как я могу заставить пользователя выбирать только мультимедийные файлы? - PullRequest
0 голосов
/ 04 августа 2020

Пользователь может выбирать и отправлять мне любые мультимедийные файлы, включая изображения, PDF-файлы и видео, но не исполняемые файлы. Но это может быть длинный список разных файлов с разными расширениями. Как я могу предоставить этот доступ пользователю, набрав C# в окне OpenFileDialog?

1 Ответ

3 голосов
/ 04 августа 2020

Вам необходимо установить свойство Filter приблизительно для длинного списка файлов, которые вы хотите, чтобы они могли выбирать. Поскольку вы не сказали нам, что это такое, я могу предложить только пример:

dlg.Filter = "Office Files|*.doc;*.xls;*.ppt";

Вы можете комбинировать спецификации:

dlg.Filter = "Imagey kinda files|*.png;*.jpg;*.gif|Texty kinda files|*.txt;*.log|Just Jpegs|*.jpg|All files|*.*";

Каждая пара значений "n1|x1|n2|x2..." образует " текст для отображения в комбинации фильтров "(n1 et c) /" список расширений файлов, отображаемых в средстве выбора файлов "(x1 et c) пара

Установка фильтра влияет только на файлы, которые показывает OFD; пользователь может просто ввести *.* в поле имени файла и нажать клавишу возврата, а затем в любом случае выбрать EXE-файл. Возможно, вам придется написать код в конце того, что извлекает список файлов из OFD, чтобы убедиться, что он не обрабатывает EXE. Неразумно полагаться на фильтр для полного предотвращения отправки вам определенных файлов; пользователь может даже переименовать EXE и JPG и при этом отправить его вам.

Если «не отправлять EXE» - это ограничение, предназначенное, например, для предотвращения передачи вирусов (потому что вы просто собираетесь пользователь выбирает и отправляет его дословно) вам нужно будет фактически посмотреть байты того, какие файлы выбирает пользователь, и убедиться, что они соответствуют заявленному имени. (Для этого вам нужно будет найти файловые структуры и т. Д. c .. Например, файлы JPEG имеют текст «JFIF» в байтах 6-10, программы обычно начинаются с байтов «MZ», zip-файлы начинаются с «PK» и т. Д. c).

Если это просто для предотвращения мусора из-за того, что эти файлы будут загружены в процедуру изменения размера, просто перехватите любые исключения, которые вызывает процедура, и игнорируйте плохой файл. Пользователю по-прежнему полезно знать, что они могут загружать, поэтому у меня все еще есть фильтр, но я просто молча игнорирую любую хрень, которую они отправляют

...