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