我正在尝试使用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++
}
我觉得可能有一些简单的方法来读取目录中所有文件的文件路径,但我找不到办法来做到这一点。
有什么建议吗?
答案 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;
}