我有这个基本的代码
Directory.GetFiles(filepath, "*.OUT")
文件路径中有一个名为Filename.OUT
的文件
上面的代码发现该文件没有问题。
现在,我通过附加一个UniqueID来重命名该文件,这样该文件就不会再次被拾取。
Filename.OUT6F9619FF-8B86-D011-B42D-00C04FC964FF
但是,该文件仍在被Directory.GetFiles()
拾取!
那么,搜索模式(*.OUT
)是正则表达式模式吗?如果是这样的话,这是有道理的。
MSDN上的信息似乎并不意味着它是。如果没有,有没有我可以使用的模式,这样它就不会被拾取?
发布于 2013-04-12 09:38:36
在使用文件系统监视器时,我不得不自己处理这个问题。除了MichaelPerrenoud所说的,你可以通过一个快速过滤器运行所有的匹配,比如:
bool ExtensionOf ( String f, String targetext ) {
return f.EndsWith( targetext );
}
如果您不需要targetext
的灵活性,只需用".OUT"
完全取代它
祝好运!
发布于 2013-04-12 09:35:23
这是预期的行为,因为在您链接的文档中声明:
文件扩展名正好为三个字符的searchPattern将返回扩展名为三个或更多个字符的文件,其中前三个字符与searchPattern中指定的文件扩展名匹配。
但与之相反的是,它说:
文件扩展名为一个、两个或三个以上字符的searchPattern仅返回扩展名长度与searchPattern中指定的文件扩展名完全匹配的文件。
因此,在您的示例中,您将使用来过滤结果。我希望是不一样的。这对很多人来说都是个问题,甚至包括我自己。
发布于 2013-04-12 09:49:19
您可以按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);
并像往常一样使用result:
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));
https://stackoverflow.com/questions/15961648
复制相似问题