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

时间:2014-06-05 16:56:59

标签: c# path getfiles

我想获得一个没有扩展名的文件路径的字符串数组。如果有帮助,它们是没有扩展名的二进制文件。

例如,我正在从文件夹/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开始。

4 个答案:

答案 0 :(得分:22)

您可以尝试使用此通配符

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

您也可以将此通配符与Directory.EnumerateFiles

一起使用
Directory.EnumerateFiles(fDir, "*.", SearchOption.AllDirectories);

答案 1 :(得分:11)

这会有所帮助:

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);
}

它将仅返回指定目录中没有扩展名的所有文件。如果您想要包含您必须使用的所有子目录:System.IO.Directory.GetFiles(@"D:\temp\", "*", SearchOption.AllDirectories)

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

答案 2 :(得分:9)

您需要对其进行第二遍过滤。

//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,如果两者都返回相同的字符串,则将结果包含在数组中。

答案 3 :(得分:2)

作为aleksey.berezan答案的替代方案,您可以在.NET 4+中执行以下操作。 EnumerateFiles将在目录树中遍历文件时返回文件。

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

}