2013-10-16 17 views
-1

我正在爲自制的Windows資源管理器搜索功能。我用Directory.GetFiles(string path, string searchPattern, searchOption searchOption)來做到這一點。我的問題是,當我打電話:使用Directory.GetFiles()和正則表達式時出錯

string searchPattern = '"' + searchBox.Text + '"'; // searchPattern = "duck" 
string path = @"D:\test"; 
string[] searchResults = Directory.GetFiles(path, searchPattern, System.IO.SearchOption.AllDirectories); 

它拋出該異常:

「路徑中具有非法字符」。

這是文件結構:

D:\ 
---test\ (Folder) 
-------duck.txt (File) 
+0

我修改了你的帖子。請閱讀[應該在題目中包含「標籤」嗎?](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),答案是**沒有**。 –

回答

4

Directory.GetFiles不支持正則表達式。但是,它支持一些特殊的「通配符」字符。從MSDN:

*零個或多個字符。
?正好爲零或一個字符。

試試這個:

string searchPattern = '*' + searchBox.Text + '*'; // searchPattern = *duck* 
string path = @"D:\test"; 
string[] searchResults = Directory.GetFiles(path, searchPattern, System.IO.SearchOption.AllDirectories); 
+0

非常感謝!我現在做了:) – sonlexqt

+0

還有一個問題:當我使用Directory.GetFiles()或Directory.GetDirectories()時,我得到了UnauthorizedAccessException,並停止搜索過程(searchResults返回null)。如何擺脫這一點? – sonlexqt

+0

@Dante_BMW當您使用'SearchOption.AllDirectories'時,如果您無權訪問任何子目錄,則會拋出該異常。解決這個問題的唯一方法就是使用遞歸函數,即處理沒有權限的目錄中的異常,但仍然返回具有權限的目錄中的文件。關於這個話題有很多關於SO的問題。 –

0

你得到「路徑中具有非法字符。」因爲你已經在你的搜索模式給出"字符

嘗試

string searchPattern ="duck.txt"; 

你會找到你想要

該文件,如果你需要給僅文件名作爲搜索模式,然後

string searchPattern =searchBox.Text +".txt"; 

如果您需要獲取包含搜索文字的文件,您可以使用

string searchPattern ="*" +searchBox.Text +"*";