С# получить пути к файлу только файлов без расширений

Я хочу получить строковый массив путей файлов, которые не имеют расширений. Это двоичные файлы без расширений, если это помогает.

Например, я загружаю группу путей файла из папки /test/

Мне нужен только путь и имена файлов, у которых нет расширения (поэтому нет .txt, no .csv, no .*)

/test/dontWant.txt

/test/dontWant.csv

/test/doWant

если я делаю:

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

Я, конечно, получаю все в этих каталогах.

если я затем попробую:

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

Я все равно получаю все в этом каталоге.

Есть ли способ получить файлы тех, у кого нет расширения?


используя "*.", работал, и я не знаю, почему я не пытался это начать.

Я должен был использовать EnumerateFiles для начала.

Ответ 1

Это поможет:

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, потому что он потребляет меньше бара.

Ответ 2

Вы можете попробовать с этим шаблоном

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

также вы можете использовать этот шаблон с Directory.EnumerateFiles

Directory.EnumerateFiles(fDir, "*.", SearchOption.AllDirectories);

Ответ 3

Вам нужно будет сделать фильтр 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, если оба из них возвращают одну и ту же строку, тогда он включает результат в массив.

Ответ 4

В качестве альтернативы ответу aleksey.berezan вы можете сделать следующее в .NET 4+. EnumerateFiles будет возвращать файлы по мере их перемещения в дереве каталогов.

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

}