【问题标题】:Error when using Directory.GetFiles() with regex将 Directory.GetFiles() 与正则表达式一起使用时出错
【发布时间】:2013-10-24 00:55:59
【问题描述】:

我正在为我自制的 Windows 资源管理器开发搜索功能。我使用Directory.GetFiles(string path, string searchPattern, searchOption searchOption) 来做到这一点。我的问题是当我打电话时:

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)

【问题讨论】:

标签: c# regex .net getfiles illegal-characters


【解决方案1】:

Directory.GetFiles 不支持正则表达式。但是,它确实支持少数特殊的“通配符”字符。来自 MSDN:

* 零个或多个字符。
? 正好零个或一个字符。

试试这个:

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

【讨论】:

  • 还有一个问题:当我使用 Directory.GetFiles() 或 Directory.GetDirectories() 时,我得到了 UnauthorizedAccessException 并且搜索过程停止(searchResults 返回 null)。怎样才能摆脱它?
  • @Dante_BMW 当您使用SearchOption.AllDirectories 时,如果您无权访问任何子目录,则会抛出该异常。解决这个问题的唯一方法(即处理您没有权限的目录上的异常,但仍返回您有权限的目录中的文件)是使用递归函数。关于这个主题有很多关于 SO 的问题。
  • 谢谢,我现在正在尝试递归方法。我的代码在这里:pastebin.com/S8AT6N37。不知道为什么有时在我的列表视图中显示同一文件的 2 个项目?希望你能纠正它......非常感谢兄弟!
  • @Dante_BMW 我没有看到任何突出的东西,但这确实应该是一个不同的问题。
【解决方案2】:

您得到“路径中的非法字符”。,因为您在搜索模式中提供了" 字符

试试

string searchPattern ="duck.txt"; 

你会找到你想要的文件

如果您只需要提供文件名作为搜索模式,那么

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 2016-12-29
    • 2011-06-19
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多