查找文件夹中所有文件的文件路径

时间:2013-12-31 17:09:38

标签: c++ file-io sdl

我正在尝试使用SDL将一堆图像转换为纹理。到目前为止,我知道可以手动完成所有工作:

//Load front alpha texture
    if (!gModulatedTexture.loadFromFile("14_animated_sprites_and_vsync/text2.png"))
    {
        printf("Failed to load front texture!\n");
        success = false;
    }
    else
.....

但是,我想要加载很多图像,所以我正在寻找的是一种自动化过程的方法。我想将所有图像放到一个文件夹中,然后执行以下操作:

i=0
while (there are still images to load) {
     textureBank[i] = current image
     i++
}

我觉得可能有一些简单的方法来读取目录中所有文件的文件路径,但我找不到办法来做到这一点。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

由于您使用的是SDL,我假设您想要跨平台。 boost::filesystem library可以执行此操作。

看看他们的directory iteration example

虽然它是第三方库的一部分,但boost::filesystem被提议包含在未来的C ++标准TR2中,因此值得学习。它最终应该是使用文件和目录的标准C ++方式。

答案 1 :(得分:1)

您不需要使用boost之类的任何第三方库,只需调用以下函数(适用于Windows操作系统)。在此之后,您将获得vector<string>中给定文件夹中的所有文件路径。

#include <Windows.h>
// folder must end with "/", e.g. "D:/images/"
vector<string> get_all_files_full_path_within_folder(string folder)
{
    vector<string> names;
    char search_path[200];
    sprintf(search_path, "%s*.*", folder.c_str());
    WIN32_FIND_DATA fd; 
    HANDLE hFind = ::FindFirstFile(search_path, &fd); 
    if(hFind != INVALID_HANDLE_VALUE) 
    { 
        do 
        { 
            // read all (real) files in current folder, delete '!' read other 2 default folder . and ..
            if(! (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) 
            {
                names.push_back(folder+fd.cFileName);
            }
        }while(::FindNextFile(hFind, &fd)); 
        ::FindClose(hFind); 
    } 
    return names;
}