在 C# 中,如何检查目录或其任何子目录中是否存在特定文件?
系统.IO.文件.存在似乎只接受单个参数,没有搜索子目录的重载。
我可以用 LINQ 来做到这一点系统.IO.目录.GetFiles使用搜索选项.AllDirectories超载,但这似乎有点严厉。
var MyList = from f in Directory.GetFiles(tempScanStorage, "foo.txt", SearchOption.AllDirectories)
where System.IO.Path.GetFileName(f).ToUpper().Contains(foo)
select f;
foreach (var x in MyList)
{
returnVal = x.ToString();
}
如果您正在寻找单个特定文件名,请使用*.*
确实是下手很重。尝试这个:
var file = Directory.GetFiles(tempScanStorage, foo, SearchOption.AllDirectories)
.FirstOrDefault();
if (file == null)
{
// Handle the file not being found
}
else
{
// The file variable has the *first* occurrence of that filename
}
请注意,这并不完全是您当前查询的作用 - 因为如果您 foo 只是,您当前的查询会找到“xbary.txt”bar
。我不知道这是有意还是无意。
如果您想了解多个匹配项,则不应使用FirstOrDefault()
当然。目前尚不清楚您到底想做什么,这使得很难提供更具体的建议。
请注意,在 .NET 4 中还有Directory.EnumerateFiles http://msdn.microsoft.com/en-us/library/system.io.directory.enumeratefiles.aspx这可能会或可能不会对您表现更好。我非常怀疑当您搜索特定文件(而不是all目录和子目录中的文件)但至少值得了解一下。编辑:正如评论中所述,它如果您无权查看目录中的所有文件,可能会有所不同 https://stackoverflow.com/questions/1393178.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)