c#只获取没有扩展名的文件的路径

本文关键字:文件 路径 扩展名 获取 | 更新日期: 2023-09-27 18:07:00

我想获得没有扩展名的文件路径的字符串数组。它们是没有扩展名的二进制文件。

例如,我正在从文件夹/test/

中加载一组文件路径

我只想要没有扩展名的路径和文件名(所以没有.txt,没有.csv,没有.*)

/test/dontWant.txt

/test/dontWant.csv

/test/doWant

如果我这样做:

String[] paths = Directory.GetFiles(fDir, "*.*", SearchOption.AllDirectories);

我当然会得到这些目录中的所有内容。

如果我尝试:

String[] paths= Directory.GetFiles(fDir, "*", SearchOption.AllDirectories); 

我仍然会得到该目录下的所有内容。

是否有一种方法可以获得那些没有扩展名的文件?


使用"*."确实有效,我不知道为什么我一开始没有尝试。

我应该用EnumerateFiles开头

c#只获取没有扩展名的文件的路径

您可以尝试使用这个通配符

String[] paths = Directory.GetFiles(fDir, "*.", SearchOption.AllDirectories);

你也可以在Directory.EnumerateFiles

中使用这个通配符
Directory.EnumerateFiles(fDir, "*.", SearchOption.AllDirectories);

这将有助于:

var filesWithoutExtension = System.IO.Directory.GetFiles(@"D:'temp'").Where(filPath => String.IsNullOrEmpty(System.IO.Path.GetExtension(filPath)));
foreach(string path in filesWithoutExtension)
{
    Console.WriteLine(path);
}

只返回指定目录中所有扩展名为w/o的文件。如果您想包含所有子目录,则必须使用:System.IO.Directory.GetFiles(@"D:'temp'", "*", SearchOption.AllDirectories)


正如大家建议的那样,最好使用Directory.EnumerateFiles,因为它消耗更少的内存。

您将需要对其进行第二次筛选。

//If you are using .NET 3.5 you can still use GetFiles, EnumerateFiles will just use less ram.
String[] paths = Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories)
                          .Where(file => Path.GetFileName(file) == Path.GetFileNameWithoutExtension(file))
                          .ToArray();

它将你的文件路径传递给GetFileNameGetFileNameWithoutExtension,如果它们都返回相同的字符串,那么它将结果包含在数组中

作为aleksey的替代品。根据berezan的回答,你可以在。net 4+中做以下事情。EnumerateFiles将返回在目录树中遍历的文件。

foreach(var file in Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories).Where(s => string.IsNullOrEmpty(Path.GetExtension(s))))
{
}