Microsoft Visual Studio:opendir()和readdir(),怎么样?

时间:2009-05-19 15:54:43

标签: visual-studio visual-c++ 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的东西,所以它的编译器相关? idk MSVC ++使用什么编译器,但是可以在MSVC ++中复制这些文件并使其正常工作吗?

我试图从MSDN查找一些代码,但它确实搞砸了,所以我希望我可以使用上面的这些函数...

6 个答案:

答案 0 :(得分:14)

我建议使用FindFirstFile()FindNextFile()

以下是MSDN example,它完全符合您的要求。

答案 1 :(得分:7)

如果您需要快速更换,您也可以使用:

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

我发现使用POSIX API for Win32的简单类

答案 2 :(得分:3)

太好了,毕竟不是那么难,我不得不使用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

答案 3 :(得分:1)

这个问题的答案很大程度上取决于你正在编译的目标平台。

MSVC ++是一个编译器,所以我猜你试图在Windows平台上执行与opendir()和readdir()类似的操作。在这种情况下,请查看以下资源:

第二个链接是MSDN页面,其中列出了Windows平台API上与文件系统交互的所有可用功能。您会发现Windows中大多数文件操作都是以调用CreateFile函数开始的。

答案 4 :(得分:0)

另一个可能更好的直接替换:https://github.com/tronkko/dirent

答案 5 :(得分:-1)

使用boost::filesystem,如果使用的是C ++ 17,则使用std::filesystem