我正在尝试验证c#控制台程序中是否存在文件。唯一的问题是文件可以有任何名称。
我唯一知道的是文件扩展名,并且只能有一个此扩展名的文件。如何验证它是否存在,然后使用它,无论名称是什么?
答案 0 :(得分:4)
使用Directory.GetFiles()
的问题是首先遍历整个文件系统,然后将所有匹配作为数组返回。 即使如果检查的第一个文件是唯一匹配的,它仍会从指定的根遍历整个文件系统,然后返回一个匹配项。
相反,使用EnumerateFiles()
进行懒散步行,在遇到第一场比赛时停止,因此:
DirectoryInfo root = new DirectoryInfo( @"C:\" ) ;
string pattern = "*.DesiredFileExtension" ;
FileInfo desiredFile = root.EnumerateFiles( pattern , SearchOption.AllDirectories )
.First()
;
如果找不到文件,它将抛出异常。请使用FirstOrDefault()
来获取null
值。
答案 1 :(得分:3)
尝试使用Directory.GetFiles静态方法:
var fileMatches = Directory.GetFiles("folder to start search in", "*.exe", SearchOption.AllDirectories);
if (fileMatches.Length == 1)
{
//my file was found
//fileMatches[0] contains the path to my file
}
请注意,使用SearchOption枚举,您只能指定当前文件夹或以递归方式搜索。
答案 2 :(得分:1)
这样的事可能有效
if (Directory.GetFiles(path, "*.ext").Any())
{
var file = Directory.GetFiles(path, ".ext").First();
}
答案 3 :(得分:1)
string extension = "txt";
string dir = @"C:\";
var file = Directory.GetFiles(dir, "*." + extension).FirstOrDefault();
if (file != null)
{
Console.WriteLine(file);
}
如果该文件不直接存在于' dir',则需要使用SearchOption.AllDirectories for Directory.GetFiles