2008-09-29 46 views
3

我想知道如何在基於正則表達式的打開文件對話框(以winforms形式) 中過濾文件。文件具有所有相同的擴展名(.xml)。 大文件分割成多個文件具有相同名稱只能用_1分開...... 我們只需要顯示文件,而不_1(第一個數據文件)在OpenFileDialog中過濾文件的正則表達式

打開文件對話框中有一個屬性過濾器,但我不知道如何以我們的文件名格式指定這個,因此是正則表達式。

Thankx, 尼基

回答

3

我不認爲你可以用打開文件對話框的過濾器屬性,它只是過濾基於擴展名的文件列表做

我想你必須讓用戶選擇一個xml文件,驗證並再次彈出對話框,如果它的_1文件。您可以訂閱FileOK事件並在此處插入此驗證。您可以使用正則表達式來驗證文件名。這是最好的,我可以做到。

+0

是正確的,你不能做到這一點。唯一的解決方案是選擇文件後的驗證。 – Biri 2008-09-29 13:40:21

-1

我不知道如何在C#中使用WinForms來完成它,但是在C++中,您要做的是安裝自定義掛鉤過程並監聽CDN_INCLUDEITEM通知。然後,你檢查每個文件名對你的正則表達式。請參閱http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx#_win32_Filters

+0

不正確。 CDN_INCLUDEITEM僅針對命名空間擴展等僞對象發送,而不適用於普通文件。這在文檔中非常明確:「對話框始終包含具有SFGAO_FILESYSTEM和SFGAO_FILESYSANCESTOR屬性的項目,無論CDN_INCLUDEITEM返回的值如何。」 請參閱此處的更多討論: http://msdn.microsoft.com/ en-us/magazine/cc300464.aspx doc here:http://msdn.microsoft.com/en-us/library/ms646862(VS.85).aspx 底線:CDN_INCLUDEITEM不會按照您的建議操作。 – Cheeso 2009-06-02 03:14:41

1

OpenFileDialog不支持這個。另一種方法是使用第三方控件,如FileView,它允許您使用任何標準過濾項目,例如正則表達式。

2

OpenFileDialogEx described in this CodeProject article是標準OpenFileDialog的擴展。該擴展的主要目的是修改對話框的顯示,但還有一些額外的鈴聲和哨聲。例如,OFDEx添加了幾個事件,用於文件更改,文件夾更改等。

有人指出CDN_INCLUDEITEM通知似乎會滿足過濾對話框中顯示的文件列表的願望。看起來好像會,但事實並非如此。 CDN_INCLUDEITEM不會執行您可能認爲或想要的操作。

this MSDN Mag article

如果創建 OFN_ENABLEINCLUDENOTIFY你的對話框,Windows發送 你的鉤子過程的CDN_INCLUDEITEM 通知每次增加 開放列表項。如果您返回FALSE,則 Windows將排除該項目。 問題 是,Windows不會通知您爲 普通文件,只有僞對象 像命名空間擴展名。當你 讀通過 放大鏡的文檔,打印是 非常清楚:「對話框 總是包含有兩個 的SFGAO_FILESYSTEM和 SFGAO_FILESYSANCESTOR屬性, 不管 CDN_INCLUDEITEM返回值的物品。」顯然 Redmondtonians爲他們自己的目的添加了CDN_INCLUDEITEM ,其中沒有 包括過濾普通文件名。

換句話說,爲了響應CDN_INCLUDEITEM,您不能爲常規文件返回FALSE,以便將它們從對話框中排除。與文檔相反,來自CDN_INCLUDEITEM的響應在常規文件中被忽略,根據我的經驗,CDN_INCLUDEITEM是甚至不會發送用於常規文件,至少在我的Vista機器上不會。

那麼是否有可能動態排除文件?那麼,是的,在C++中;爲了響應CDN_FOLDERCHANGED消息,您可以獲取並設置包含這些文件的CListCtrl的內容。我還沒有想出如何在C#中設置這個列表。

0

你應該能夠用下面的過濾器來做到這一點: 數據文件| * _1.xml

+0

這將工作得到所有文件以_1.xml結尾 他希望那些不以此爲結尾的文件。 – 00jt 2013-02-20 16:41:03