C++11标准中遍历文件夹方法

C++遍历文件夹方法

前言:C++17标准中增加了filesystem遍历文件夹方法,该方法与boost.filesystem中的相关方法基本相同。但某些原因导致,在项目中C++执行标准为14,测试了filesystem发现不能够顺利使用,便测试了一种适用于C++11标准的遍历文件夹方法便于自己使用,仅供参考。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <dirent.h>
#include <sys/stat.h>

void test_ItDir(const std::string& path)
{
	DIR* dir = opendir(path.c_str());
	if (dir == nullptr)
	{
		std::cerr << "Cannot open directory: " << path << std::endl;
		return;
	}

	struct dirent* entry;
	while ((entry = readdir(dir)) != nullptr)
	{
		std::string name = entry->d_name;
		if (name == "." || name == "..")
		{
			continue;
		}

		std::string fullPath = path + "/" + name;
		struct stat stat_buf;
		if (stat(fullPath.c_str(), &stat_buf) != 0)
		{
			std::cerr << "Cannot stat file: " << fullPath << std::endl;
			return;
		}
		// Determine whether it is a folder
		if (S_ISDIR(stat_buf.st_mode))
		{
			std::cout << "Directory: " << fullPath << std::endl;
			test_ItDir(fullPath);
		}
		else if (S_ISREG(stat_buf.st_mode))
		{
			std::cout << "File: " << fullPath << std::endl;
		}
	}
	closedir(dir);

}

int main()
{
	std::string path = "C:/Users/admin/Desktop/test";
	test_ItDir(path);
	return 1;
}

结果如图:
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Linux C文件夹,可以使用dirent.h头文件的相关函数来实现。下面是一个示例代码: ```c #include <dirent.h> #include <stdio.h> #include <stdlib.h> #include <string.h> void TraverseFolder(const char* folderPath) { DIR* dir = opendir(folderPath); if (dir == NULL) { printf("Folder doesn't exist!\n"); return; } struct dirent* entry; while ((entry = readdir(dir)) != NULL) { if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) { printf("%s\n", entry->d_name); } } closedir(dir); } int main() { const char* folderPath = "./imgs"; TraverseFolder(folderPath); return 0; } ``` 这段代码使用opendir函数打开指定的文件夹路径,然后使用readdir函数遍文件夹的文件和子文件夹。在遍的过程,排除了当前目录"."和上层目录".."。你可以根据需求修改代码,将文件名存储到一个向量或其他数据结构,以便后续处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux-C++-遍指定文件夹路径下的文件列表并将路径写到txt文件](https://download.csdn.net/download/lobster_wang/10438535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux 下 C++ 遍文件夹下的文件名](https://blog.csdn.net/weixin_38419133/article/details/103561532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值