0

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

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

4

4 回答 4

4

using 的问题Directory.GetFiles()是首先遍历整个文件系统,然后将所有匹配项作为数组返回。即使检查的第一个文件是唯一的匹配项,它仍然会从指定的根目录遍历整个文件系统,然后再返回一个匹配项。

相反,使用EnumerateFiles()做一个懒惰的行走,在遇到第一个匹配时停止,因此:

DirectoryInfo root        = new DirectoryInfo( @"C:\" ) ;
string        pattern     = "*.DesiredFileExtension" ;
FileInfo      desiredFile = root.EnumerateFiles( pattern , SearchOption.AllDirectories )
                                .First()
                                ;

如果找不到文件,它将抛出异常。用于FirstOrDefault()获取null值。

于 2012-12-06T01:34:31.740 回答
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 枚举,您可以仅指定当前文件夹或递归搜索。

于 2012-12-06T01:10:52.763 回答
1

这样的事情可能会奏效

if (Directory.GetFiles(path, "*.ext").Any())
{
   var file = Directory.GetFiles(path, ".ext").First();
}
于 2012-12-06T01:12:33.007 回答
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

于 2012-12-06T01:14:58.837 回答