Microsoft Visual Studio: opendir() и readdir(), как?

Я использовал этот вид кода в моем Dev-CPP раньше:

if((dh = opendir(folder)) !== false){
    while((file = readdir(dh)) !== false){
        // do my stuff
    }
    closedir(dh);
}

Но сейчас я использую MSVC++ и не знаю, как добавить туда эти файлы, я попытался скопировать туда файл dirent.h / dir.h / errno.h, но он выдает еще одну ошибку, связанную с другими включенными файлами внутри этих файлов.. И, глядя в файлы, я вижу там материал mingw, так что его компилятор связан? ИДК, который использует компилятор MSVC++, но возможно ли скопировать эти файлы в MSVC++ и заставить его работать?

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

5 ответов

Решение

Я бы предложил использовать FindFirstFile() и FindNextFile ().

Вот пример MSDN, который делает именно то, что вы хотите.

Если вам нужна быстрая замена, вы также можете использовать:

http://www.two-sdg.demon.co.uk/curbralan/code/dirent/dirent.html

Простой класс, который я нашел, который использует POSIX API для Win32

В общем, это было не так сложно, мне пришлось использовать цикл do-while:

HANDLE hFind;
WIN32_FIND_DATA FindFileData;

if((hFind = FindFirstFile("C:/some/folder/*.txt", &FindFileData)) != INVALID_HANDLE_VALUE){
    do{
        printf("%s\n", FindFileData.cFileName);
    }while(FindNextFile(hFind, &FindFileData));
    FindClose(hFind);
}

Это действительно лучше, потому что я могу использовать "*.txt" и т. Д., Намного легче найти некоторые конкретные типы файлов, раньше мне нужно было написать собственную функцию соответствия для этого:D

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

MSVC++ - это компилятор, поэтому я предполагаю, что вы пытаетесь выполнить действия, аналогичные opendir() и readdir() на платформе Windows. В этом случае взгляните на следующие ресурсы:

Вторая ссылка - это страница MSDN, на которой перечислены все функции, доступные в API платформы Windows для взаимодействия с файловой системой. Вы обнаружите, что большинство операций с файлами в Windows начинаются с вызова функции CreateFile.

Использовать boost::filesystem, или std::filesystem если вы используете C++17

Другая, возможно, гораздо лучшая замена: https://github.com/tronkko/dirent

Другие вопросы по тегам