[英]C# get file paths of just files with no extensions
我想获得一个没有扩展名的文件路径的字符串数组。 如果有帮助,它们是没有扩展名的二进制文件。
例如,我正在从文件夹/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
开始。
您可以尝试使用此通配符
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);
}
它将仅返回指定目录中没有扩展名的所有文件。 如果要包含所有必须使用的子目录: System.IO.Directory.GetFiles(@"D:\\temp\\", "*", SearchOption.AllDirectories)
。
UPDATE
正如大家建议的那样,最好使用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();
所以它的作用是将文件路径传递给GetFileName
和GetFileNameWithoutExtension
,如果两者都返回相同的字符串,则将结果包含在数组中。
作为aleksey.berezan的答案的替代方案,您可以在.NET 4+中执行以下操作。 EnumerateFiles
将在目录树中遍历文件时返回文件。
foreach(var file in Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories).Where(s => string.IsNullOrEmpty(Path.GetExtension(s))))
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.