我正在尝试验证 ac# 控制台程序中是否存在文件。唯一的问题是文件可以有任何名称。
我唯一知道的是文件扩展名,这个扩展名只能有一个文件。如何验证它是否存在,然后使用它的名称是什么?
using 的问题Directory.GetFiles()
是首先遍历整个文件系统,然后将所有匹配项作为数组返回。即使检查的第一个文件是唯一的匹配项,它仍然会从指定的根目录遍历整个文件系统,然后再返回一个匹配项。
相反,使用EnumerateFiles()
做一个懒惰的行走,在遇到第一个匹配时停止,因此:
DirectoryInfo root = new DirectoryInfo( @"C:\" ) ;
string pattern = "*.DesiredFileExtension" ;
FileInfo desiredFile = root.EnumerateFiles( pattern , SearchOption.AllDirectories )
.First()
;
如果找不到文件,它将抛出异常。用于FirstOrDefault()
获取null
值。
尝试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 枚举,您可以仅指定当前文件夹或递归搜索。
这样的事情可能会奏效
if (Directory.GetFiles(path, "*.ext").Any())
{
var file = Directory.GetFiles(path, ".ext").First();
}
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