huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


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;
}


效果:

图片.png


此函数由https://blog.csdn.net/qiqzhang/article/details/83506886 改编而来,基本全都是原创的。

PS:我写这个函数的时候直接一次性写出来,调试发现效果良好,多次测试皆无问题,太爽了。因为里面有更新动态数组的地方,我还以为要出bug呢,看来是多虑了,哈哈。


2021.7.12增:

注意:根据测试,如果修改上面函数的代码以得到文件夹目录的路径,得到的文件夹目录路径会像是这样的:

D:\game

也就是末尾不含'\'



返回首页


Copyright (C) 2018-2022 huidong