C# 查找仅知道扩展名的文件名
我试图验证c控制台程序中是否存在文件。唯一的问题是文件可以有任何名称 我只知道文件的扩展名,这个扩展名只能有一个文件。如何验证它是否存在,然后使用它(无论名称是什么?尝试静态方法:C# 查找仅知道扩展名的文件名,c#,file,console,C#,File,Console,我试图验证c控制台程序中是否存在文件。唯一的问题是文件可以有任何名称 我只知道文件的扩展名,这个扩展名只能有一个文件。如何验证它是否存在,然后使用它(无论名称是什么?尝试静态方法: var fileMatches = Directory.GetFiles("folder to start search in", "*.exe", SearchOption.AllDirectories); if (fileMatches.Length == 1) { //my file was found
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 enum,您可以仅指定当前文件夹或进行递归搜索。类似的操作可能会奏效
if (Directory.GetFiles(path, "*.ext").Any())
{
var file = Directory.GetFiles(path, ".ext").First();
}
如果文件不直接位于“dir”下,则需要对Directory.GetFiles使用SearchOption.AllDirectories使用Directory.GetFiles的问题是首先遍历整个文件系统,然后将所有匹配项作为数组返回。即使检查的第一个文件是唯一的匹配文件,它仍然会在返回一个匹配文件之前从指定的根目录遍历整个文件系统
相反,使用EnumerateFiles执行惰性漫游,在遇到第一个匹配时停止,因此:
DirectoryInfo root = new DirectoryInfo( @"C:\" ) ;
string pattern = "*.DesiredFileExtension" ;
FileInfo desiredFile = root.EnumerateFiles( pattern , SearchOption.AllDirectories )
.First()
;
如果找不到文件,它将抛出异常。使用FirstOrDefault获取空值。在PHP中,我将使用glob来匹配文件名。例如,如果扩展名为.myext,则只需匹配*.myext并获得文件名列表。然后你可以用第一个。在这个问题中,有人问如何在C中实现glob:您知道文件将存在的文件夹吗?在分配中,文件夹和文件名可以由用户指定,但分配文件夹和文件名仍有默认值?这是家庭作业吗?我们不应该为你做作业。作业远不止这些。而且,在我们拿到这项作业之前,我们还没有看到任何文件,因为我们的学者系统已经结束了我们所谓的课程,还有一项分级作业要做。下周我们将进行期末考试,我们需要自己去弄清楚有关文件的情况。这需要额外的一点代码才能真正得到未知的文件名——只有扩展名是已知的。
DirectoryInfo root = new DirectoryInfo( @"C:\" ) ;
string pattern = "*.DesiredFileExtension" ;
FileInfo desiredFile = root.EnumerateFiles( pattern , SearchOption.AllDirectories )
.First()
;