замена для findfirst() и findnext()

Есть ли замена findfirst() и findnext(). Я использую microsoft visual c++ 2010 express, и он не поддерживает ни эти функции, ни заголовочный файл <dir.h>?

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

Если нет замены упомянутым функциям, есть ли другой выход. ? Некоторые другие функции?


person Suhail Gupta    schedule 04.07.2011    source источник
comment
Вы проверили: msdn.microsoft.com/en -us/library/aa364418(v=vs.85).aspx   -  person iammilind    schedule 04.07.2011
comment
@ iammilind На самом деле это должен был быть ответ   -  person Suhail Gupta    schedule 04.07.2011


Ответы (4)


Как сказал iammilind в комментариях (вероятно, достойный ответа) — вы можете использовать функции Windows API FindFirstFile и FindNextFile, вам просто нужно заполнить структуру и повторяйте последний, пока не достигнете недопустимого дескриптора. Эти функции действительно работают на консоли, но вы должны включить заголовок 'Windows.h'.

Однако у этих функций есть несколько ловушек, и если вы хотите, чтобы ваш код работал на чем-то другом, кроме Windows, вам, вероятно, лучше использовать другой заголовок/библиотеку (например, Boost::Filesystem, упомянутую vBx).

Кроме того, это может помочь: C++ - Загрузить все имена файлов + подсчитать количество файлов в текущем каталоге + отфильтровать расширение файла

person Seb Holzapfel    schedule 04.07.2011

Вы можете использовать Boost.Filesystem для тот

person Adrian    schedule 04.07.2011
comment
... и я не могу найти функцию поиска файлов. - person Suhail Gupta; 04.07.2011
comment
прочитайте учебник boost.org/doc/libs /1_46_1/libs/filesystem/v3/doc/tutorial.html вы увидите, насколько это просто - person Adrian; 04.07.2011

В Windows вы можете использовать: _findnext, _findnext64, _findnexti64, _wfindnext, _wfindnext64, _wfindnexti64

person LEXX    schedule 21.09.2012

Если вы используете MinGW Developer Studio, это может помочь:

Предполагая, что у вас есть файлы в каталоге, который вы хотите посмотреть, будет:

sample1.txt
sample2.txt
sample3.txt

Код для двух файлов, соответствующих шаблону "s*", будет таким:

#include<stdio.h>
#include<io.h>

int main()
{
    // the input pattern and output struct      
    char *pattern = "s*";
    struct _finddata_t fileinfo;

    // first file (sample1.txt)
    int x = _findfirst(pattern, &fileinfo);
    printf("%s" ,fileinfo.name);

    // next file (sample2.txt)
    _findnext(x, &fileinfo);
    printf("%s" ,fileinfo.name);

}
person Gabi Dj    schedule 09.03.2015