5

我有这个基本代码

Directory.GetFiles(filepath, "*.OUT")

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

上面的代码发现该文件很好。

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

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

但是,该文件仍然被Directory.GetFiles()

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

MSDN上的信息似乎并不暗示它是。如果没有,是否有我可以使用的模式使其不会被拾取?

4

3 回答 3

3

在使用文件系统监视器时,我不得不自己处理这个问题。添加 MichaelPerrenoud 所说的内容您可以通过快速过滤器运行所有比赛,例如:

bool ExtensionOf ( String f, String targetext ) {
    return f.EndsWith( targetext );
}

如果您不需要 的灵活性targetext,只需将其完全替换为".OUT"

祝你好运!

于 2013-04-12T01:38:36.287 回答
3

这是预期的行为,因为在您链接的文档中它指出:

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

但相比之下,它指出:

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

所以在你的情况下,你将不得不过滤掉结果。我希望它是不同的。这对很多人来说都是个问题,包括我自己。

于 2013-04-12T01:35:23.363 回答
2

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

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);

并像往常一样使用结果:

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));

沙盒。

于 2013-04-12T01:49:19.103 回答