OpenFileDialog - отображать только те имена файлов, которые не имеют расширений - PullRequest
4 голосов
/ 18 мая 2010

В моей программе на C # есть следующий код:

        OpenFileDialog fDialog = new OpenFileDialog();
        fDialog.Title = "Open a file";
        fDialog.Filter =
           "NCF files (*.ncf)|*.ncf|All files (*.*)|*.*|No Extensions (*.)|*.";



Я хочу, чтобы пользователь мог выбрать следующее:

*. NCF (только файлы с расширением .NCF)
**. * (все файлы)

и файлы, имеющие без расширений , такие как:

filewithnoextension



Я знаю, что ***. * Сделает это, но он также отображает .NCF, .TXT и все другие файлы в том же каталоге.

Я просто хочу отображать имена файлов без расширений.



Фильтрация с помощью *. не делает трюк. Он отлично работает при работе с окном DOS ( dir *. ), но C #, похоже, игнорирует *. фильтр.





Есть ли способ, которым я могу сделать это с C #?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 18 мая 2010

Файл readme обычно имеет расширение. Я полагаю, что вы сделали, но вы проверили эту опцию папки, чтобы увидеть расширения известных типов файлов? Это что-то изменило?

РЕДАКТИРОВАТЬ # 1

Честно говоря, я сомневаюсь, что вы сможете заставить OpenFileDialog отображать файлы без расширения, поскольку свойство Filter основано на расширении.

Возможно, вы могли бы наследовать базу своего собственного реализованного OpenFileDialog, используя объекты пространства имен System.IO, такие как, например, DirectoryInfo, что позволит вам получать файлы просматриваемой папки с помощью метода Getfiles(), затем отфильтруйте себя через LINQ для отображения файлов без расширения только с помощью свойства FileInfo.Extension.

РЕДАКТИРОВАТЬ # 2

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

Надеюсь, это вам поможет!

1 голос
/ 15 марта 2014

Я знаю, что это работает:

fDialog.Filter = "No extension Files|" + null;

Я не тестировал с несколькими вариантами выбора.

Хотя это старый пост, хотя мне было бы полезно, чтобы кто-то искал способ отображать только файлы без расширений.

0 голосов
/ 18 мая 2010

Если другая программа создает эти файлы в том же месте, почему бы вашему коду не добавить расширение (что-то безобидное, например «.XXX») к каждому файлу без расширений в этой папке, и затем показать диалог?

Редактировать: Или см. Эту статью MSDN:

http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx

Из раздела Фильтры :

Уведомление CDN_INCLUDEITEM сообщение предоставляет другой способ фильтрации имена, которые диалоговое окно дисплеи. Чтобы использовать это сообщение, предоставьте процедура подключения OFNHookProc и указать OFN_ENABLEINCLUDENOTIFY флаг в структуре OPENFILENAME когда вы создаете диалоговое окно. каждый время, когда пользователь открывает папку, диалоговое окно отправляет CDN_INCLUDEITEM уведомление о вашей процедуре подключения за каждый предмет во вновь открывшемся папка. Возвращаемое значение крючка процедура показывает, будет ли диалог поле должно отображать элемент в список элементов папки.

Внизу в разделе Процедуры подключения в стиле Explorer в статье объясняется, как это сделать. По сути, вы передаете обработчик событий в диалоговое окно OpenFile, и каждый раз, когда пользователь переходит в новую папку, диалог перебирает все файлы в папке и вызывает ваш обработчик событий для каждого из них. Внутри обработчика событий вы должны поместить свой код, чтобы определить, имеет ли файл расширение или нет, и вернуть соответственно true или false.

0 голосов
/ 18 мая 2010

Я думал, что использование *. будет работать, но это не так, так что кажется, что это ограничение элемента управления OpenFileDialog.

Вы можете создать свой собственный диалог, но OpenFileDialog не наследуется, так что это будет большая работа для небольшой функции.

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

Удачи!

...