C# get пути к файлам только файлов без расширений
Я хочу получить строковый массив путей к файлам, которые не имеют расширений. Это двоичные файлы без расширений, если это помогает.
например, я загружаю группу путей к файлам из папки /test/
Я хочу только путь и имена файлов, которые не имеют расширения (так что нет .txt
, нет .csv
, нет .*
)
/test/dontWant.txt
/test/dontWant.csv
/test/doWant
если я do:
String[] paths = Directory.GetFiles(fDir, "*.*", SearchOption.AllDirectories);
Я, конечно, все в этих каталогах.
если я тогда попробую:
String[] paths= Directory.GetFiles(fDir, "*", SearchOption.AllDirectories);
Я все равно получу все в этом каталоге.
есть ли способ просто получить файлы тех, которые не имеют расширения?
используя "*."
работал, и я не знаю, почему я не попробовал это для начала.
Я должен был с помощью EnumerateFiles
для начала.
4 ответов
Это поможет:
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
потому что он потребляет меньше оперативной памяти.
можно попробовать с этого шаблона
String[] paths = Directory.GetFiles(fDir, "*.", SearchOption.AllDirectories);
также вы можете использовать этот шаблон Directory.EnumerateFiles
Directory.EnumerateFiles(fDir, "*.", SearchOption.AllDirectories);
вам нужно будет сделать фильтр 2-го прохода на нем.
//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
, если оба они возвращают одну и ту же строку, она включает результат в массив.
как альтернатива Алексею.ответ березана, вы можете сделать следующее в .NET 4+. EnumerateFiles
вернет файлы по мере их прохождения в дереве каталогов.
foreach(var file in Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories).Where(s => string.IsNullOrEmpty(Path.GetExtension(s))))
{
}