Количество файлов с данным расширением в каталоге - C ++?

StackOverflow https://stackoverflow.com/questions/1935274

Вопрос

Возможно ли в C ++ подсчитать количество файлов с заданным расширением в каталоге?

Я пишу программу, где было бы неплохо сделать что-то подобное (псевдокод):

if (file_extension == ".foo")
    num_files++;
for (int i = 0; i < num_files; i++)
    // do something

Очевидно, что эта программа гораздо сложнее, но это должно дать вам общее представление о том, что я пытаюсь сделать.

Если это невозможно, просто скажите мне.

Спасибо!

Это было полезно?

Решение

В C или C ++ нет ничего стандарты сами об обращении с каталогами, но почти любая ОС, стоимость которой солеет, будет такого зверя, одним из примеров является findfirst/findnext функции или readdir.

То, как вы делаете это, является простой петлей по этим функциям, проверяя конец струн, возвращаемых для расширения, которое вы хотите.

Что-то типа:

char *fspec = findfirst("/tmp");
while (fspec != NULL) {
    int len = strlen (fspec);
    if (len >= 4) {
        if (strcmp (".foo", fspec + len - 4) == 0) {
            printf ("%s\n", fspec);
        }
    }
    fspec = findnext();
}

Как указано, фактические функции, которые вы будете использовать для прохождения каталога, являются специфичными для ОС.

Для Unix это почти наверняка будет использованием opendir, Риддир а также закрытый. Анкет Этот код является хорошей отправной точкой для этого:

#include <dirent.h>

int len;
struct dirent *pDirent;
DIR *pDir;

pDir = opendir("/tmp");
if (pDir != NULL) {
    while ((pDirent = readdir(pDir)) != NULL) {
        len = strlen (pDirent->d_name);
        if (len >= 4) {
            if (strcmp (".foo", &(pDirent->d_name[len - 4])) == 0) {
                printf ("%s\n", pDirent->d_name);
            }
        }
    }
    closedir (pDir);
}

Другие советы

Этот вид функциональности является специфичным для ОС, поэтому нет стандартного, портативного метода этого.

Однако использование Библиотека файловых систем Boost Вы можете сделать это, и гораздо больше операций, связанных с файловой системой в портативной манере.

Прежде всего, какую ОС вы пишете?

  • Если это окна, то ищите FindFirstFile а также FindNextFile в MSDN.
  • Если вы ищете код для систем POSIX, прочитайте man за opendir а также readdir или же readdir_r.
  • Для кросс -платформы я бы предложил использовать библиотеку Boost.filesystem.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top