我有这个基本代码
Directory.GetFiles(filepath, "*.OUT")
在文件路径中有一个名为Filename.OUT
上面的代码发现文件正常。
现在,我通过附加一个UniqueID重命名该文件,以便不再获取该文件。
Filename.OUT6F9619FF-8B86-D011-B42D-00C04FC964FF
但是,该文件仍然被Directory.GetFiles()
提取!
那么,searchpattern(*.OUT
)是一个正则表达式模式吗?如果是这样,这是有道理的。
MSDN上的信息似乎并不意味着它是。如果没有,是否有我可以使用的模式,以便它不被拿起?
答案 0 :(得分:3)
这是预期的行为,因为在您链接的文档中指出:
文件扩展名正好为三个字符的searchPattern将返回扩展名为三个或更多字符的文件,其中前三个字符与searchPattern中指定的文件扩展名匹配。
但相反,它表示:
文件扩展名为一,二或三个以上字符的searchPattern仅返回扩展名与searchPattern中指定的文件扩展名完全匹配的文件。
因此,在您的情况下,您将拥有来过滤掉结果。我希望它不同。这对许多人来说都是一个问题,甚至包括我自己。
答案 1 :(得分:3)
在使用文件系统监视器时,我必须自己处理这个问题。添加到MichaelPerrenoud所说的内容您可以通过快速过滤器运行所有匹配,例如:
bool ExtensionOf ( String f, String targetext ) {
return f.EndsWith( targetext );
}
如果您不需要targetext
的灵活性,只需将其完全替换为".OUT"
答案 2 :(得分:2)
你可以按guid的长度去掉(substring)输入字符串:
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));