2021.7.12增:
建议看这个新的函数:http://huidong.xyz/index.php?mode=2&id=270
#include <iostream>
#include <string>
#include <io.h>
using namespace std;
// 得到某目录下的文件列表,不含文件夹
// in: path 文件目录(例如:E:\\abc)
// out: pList 文件列表指针,只需要传入空指针即可,格式是每个下标对应一个绝对路径名
// out: nListNum 文件列表内文件个数
// in: type 指定搜索某格式的文件,默认为 "\\*" 代表要遍历所有的类型,如改成 "\\*.jpg" 表示遍历jpg类型文件
void GetFileListString(string path, string*& pList, int* nListNum, string type = "\\*")
{
long hFile = 0, num = 0;
_finddata_t fileInfo;
string pathName, exdName, * list = NULL;
if ((hFile = _findfirst(pathName.assign(path).append(type).c_str(), &fileInfo)) == -1) return;
do
{
// 这一项是文件夹
if (fileInfo.attrib & _A_SUBDIR)
continue;
// 这一项是文件
else
{
// 更新string数组
num++;
string* new_list = new string[num];
for (int i = 0; i < num - 1; i++)
new_list[i] = list[i];
if (num - 1 > 0) delete[] list;
else if (num > 0) delete list;
list = new_list;
// 如果末尾有"\\",则无需再在绝对路径中加"\\"
if (path[path.size() - 1] == '\\')
list[num - 1] = path + fileInfo.name;
// 如果末尾无"\\",则需要再在绝对路径中加"\\"
else
list[num - 1] = path + "\\" + fileInfo.name;
}
} while (_findnext(hFile, &fileInfo) == 0);
_findclose(hFile);
pList = list;
*nListNum = num;
}
int main()
{
string* list;
int num;
// 列举"D:\\setup"下的所有文件,存储文件名列表到list,文件数量到num
GetFileListString("D:\\setup", list, &num);
for (int i = 0; i < num; i++) printf("%s\n", list[i].c_str());
while(true);
return 0;
}
效果:
此函数由https://blog.csdn.net/qiqzhang/article/details/83506886 改编而来,基本全都是原创的。
PS:我写这个函数的时候直接一次性写出来,调试发现效果良好,多次测试皆无问题,太爽了。因为里面有更新动态数组的地方,我还以为要出bug呢,看来是多虑了,哈哈。
2021.7.12增:
注意:根据测试,如果修改上面函数的代码以得到文件夹目录的路径,得到的文件夹目录路径会像是这样的:
D:\game
也就是末尾不含'\'