C++获取文件夹下特定后缀的所有文件名(2)

#include <string>
#include <io.h>
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;

/************************************************************************/
/*  获取文件夹下所有文件名
    输入:     
        path    :   文件夹路径
        exd     :   所要获取的文件名后缀,如jpg、png等;如果希望获取所有
                    文件名, exd = ""
    输出:
        files   :   获取的文件名列表
    HolaMirai 2016/11/24 添加保存文件名到.txt文件中
    shao, 20140707  
*/
/************************************************************************/
void getFiles( string path, string exd, vector<string>& files )
{
    //文件句柄
    long   hFile   =   0;
    //文件信息
    struct _finddata_t fileinfo;
    string pathName, exdName;

    if (0 != strcmp(exd.c_str(), ""))
    {
        exdName = "\\*." + exd;
    }
    else
    {
        exdName = "\\*";
    }

    if((hFile = _findfirst(pathName.assign(path).append(exdName).c_str(),&fileinfo)) !=  -1)
    {
        do
        {
            //如果是文件夹中仍有文件夹,迭代之
            //如果不是,加入列表
            // 不推荐使用,硬要使用的话,需要修改else 里面的语句
            /*if((fileinfo.attrib &  _A_SUBDIR))
            {
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)
                    getFiles( pathName.assign(path).append("\\").append(fileinfo.name), exd, files );
            }
            else */
            {
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)
                    //files.push_back(pathName.assign(path).append("\\").append(fileinfo.name)); // 要得到绝对目录使用该语句
                    //如果使用
                    files.push_back(fileinfo.name); // 只要得到文件名字使用该语句
            }
        }while(_findnext(hFile, &fileinfo)  == 0);
        _findclose(hFile);
    }
}

/*
 * argv[1]: 文件夹目录
 * argv[2]: 文件后缀
*/
int main(int argc, char *argv[])
{
    if (argc != 3)
    {
        printf("please input the folder path and postfix.\n" \
            "argv[1]:folder path\n"\
            "argv[2]:postfix\n");
        return 0;
    }
    vector<string> files;

    //获取该路径下的所有jpg文件
    getFiles(argv[1], argv[2], files);

    ofstream outf; 
    outf.open("fileName.txt");
    int size = files.size();
    for (int i = 0;i < size;i++)
    {
        outf<<files[i].c_str()<<endl;
        //cout<<files[i].c_str()<<endl;
    }
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,可以使用以下方法来获取文件夹目录下的所有文件名: 1. 使用 `<dirent.h>` 头文件中的函数来遍历文件夹目录。具体步骤如下: ```cpp #include <iostream> #include <dirent.h> #include <vector> #include <string> std::vector<std::string> GetFilesInDirectory(const std::string& directory) { std::vector<std::string> files; DIR* dir; struct dirent* entry; if ((dir = opendir(directory.c_str())) != nullptr) { while ((entry = readdir(dir)) != nullptr) { if (entry->d_type == DT_REG) // 只获取普通文件,不包括目录 { files.push_back(entry->d_name); } } closedir(dir); } else { std::cout << "无法打开目录:" << directory << std::endl; } return files; } int main() { std::string directory = "your_directory_path"; std::vector<std::string> files = GetFilesInDirectory(directory); for (const auto& file : files) { std::cout << file << std::endl; } return 0; } ``` 2. 使用C++17的 `<filesystem>` 头文件 (C++17标准新增)。具体步骤如下: ```cpp #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { std::string directory = "your_directory_path"; for (const auto& entry : fs::directory_iterator(directory)) { if (entry.is_regular_file()) // 只获取普通文件,不包括目录 { std::cout << entry.path().filename().string() << std::endl; } } return 0; } ``` 以上两种方法都可以获取文件夹目录下的所有文件名。如果使用C++17及以上版本,推荐使用第二种方法,因为它提供了更简洁的API。如果使用较旧的C++版本,则可以选择第一种方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值