首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Directory.GetFiles()搜索模式

Directory.GetFiles()搜索模式
EN

Stack Overflow用户
提问于 2013-04-12 09:30:58
回答 3查看 4.7K关注 0票数 5

我有这个基本的代码

代码语言:javascript
运行
复制
Directory.GetFiles(filepath, "*.OUT")

文件路径中有一个名为Filename.OUT的文件

上面的代码发现该文件没有问题。

现在,我通过附加一个UniqueID来重命名该文件,这样该文件就不会再次被拾取。

Filename.OUT6F9619FF-8B86-D011-B42D-00C04FC964FF

但是,该文件仍在被Directory.GetFiles()拾取!

那么,搜索模式(*.OUT)是正则表达式模式吗?如果是这样的话,这是有道理的。

MSDN上的信息似乎并不意味着它是。如果没有,有没有我可以使用的模式,这样它就不会被拾取?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-12 09:38:36

在使用文件系统监视器时,我不得不自己处理这个问题。除了MichaelPerrenoud所说的,你可以通过一个快速过滤器运行所有的匹配,比如:

代码语言:javascript
运行
复制
bool ExtensionOf ( String f, String targetext ) {
    return f.EndsWith( targetext );
}

如果您不需要targetext的灵活性,只需用".OUT"完全取代它

祝好运!

票数 3
EN

Stack Overflow用户

发布于 2013-04-12 09:35:23

这是预期的行为,因为在您链接的文档中声明:

文件扩展名正好为三个字符的searchPattern将返回扩展名为三个或更多个字符的文件,其中前三个字符与searchPattern中指定的文件扩展名匹配。

但与之相反的是,它说:

文件扩展名为一个、两个或三个以上字符的searchPattern仅返回扩展名长度与searchPattern中指定的文件扩展名完全匹配的文件。

因此,在您的示例中,您将使用来过滤结果。我希望是不一样的。这对很多人来说都是个问题,甚至包括我自己。

票数 3
EN

Stack Overflow用户

发布于 2013-04-12 09:49:19

您可以按guid的长度剥离(子串)输入字符串:

代码语言:javascript
运行
复制
string fileName = "Filename.OUT";
string seed = "6F9619FF-8B86-D011-B42D-00C04FC964FF";
string input = fileName + seed;
string result = input.Substring(0, input.Length - seed.Length);
FileInfo file = new FileInfo(result);
Console.WriteLine(file.Extension);

并像往常一样使用result:

代码语言:javascript
运行
复制
private static string StripSeed(string input)
{
    return input.Substring(0, input.Length - 36); // length of seed (guid)
}

Directory.EnumerateFile("*.*")
         .Select(p => StripSeed(p))
         .Select(f => new FileInfo(f))
         .Where(fi => fi.Extesnsion.Equals(".OUT", StringComparison.OrdinalIgnoreCase));

Sandbox.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15961648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档