找到只知道扩展名的文件名

时间:2012-12-06 01:04:42

标签: c# file console

我正在尝试验证c#控制台程序中是否存在文件。唯一的问题是文件可以有任何名称。

我唯一知道的是文件扩展名,并且只能有一个此扩展名的文件。如何验证它是否存在,然后使用它,无论名称是什么?

4 个答案:

答案 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