C++遍历文件或文件夹
来源:互联网 发布:xp系统网络共享密码 编辑:程序博客网 时间:2024/06/16 16:24
我们常常需要遍历一个文件夹下的所有文件或文件夹。
boost使用wrecursive_directory_iterator提供了遍历子目录或子目录下的文件的能力,使用非常方便。
<span style="font-family:Courier New;font-size:14px;">#include <vector>#include <iostream>#include <string>#include <algorithm>#include <iterator>#include <iosfwd>#include <tchar.h>#include "boost/timer.hpp"#include "boost/filesystem.hpp"#include "boost/algorithm/string.hpp"using namespace std;void GetFilenameByPath(vector<wstring> &_files_name_vec,boost::filesystem::wpath _path, wstring _ext_str = _T(""));void GetFilePathByPath(vector<wstring> &_files_name_vec,boost::filesystem::wpath _path);int main(){boost::timer tm;vector<wstring> files_vec;wcout.imbue(locale("chs"));wcout << _T("遍历文件夹:") << endl;GetFilePathByPath(files_vec, _T("D:\\KuGou"));copy(files_vec.begin(), files_vec.end(), ostream_iterator<wstring, wchar_t>(wcout, _T("\n")));wcout << _T("paths:") << files_vec.size() << _T("个 use time:") << tm.elapsed() << _T("S") << endl; tm.restart();files_vec.clear();files_vec.swap(files_vec);wcout <<endl<< _T("遍历文件:") << endl; GetFilenameByPath(files_vec, _T("D:\\KuGou")); copy(files_vec.begin(), files_vec.end(), ostream_iterator<wstring, wchar_t>(wcout, _T("\n")));wcout << _T("files:") << files_vec.size() << _T("个 use time:") << tm.elapsed()<<_T("S") << endl;system("pause");return 0;}void GetFilenameByPath(vector<wstring> &_files_name_vec,boost::filesystem::wpath _path, wstring _ext_str){boost::filesystem::wrecursive_directory_iterator itr_end;for (boost::filesystem::wrecursive_directory_iterator itr_beg(_path);itr_beg != itr_end; ++itr_beg){if ((_ext_str == _T("") || boost::ends_with(itr_beg->path().wstring(), _ext_str))&& boost::filesystem::is_regular_file(*itr_beg)){_files_name_vec.push_back(itr_beg->path().wstring());}}}void GetFilePathByPath(vector<wstring> &_files_name_vec,boost::filesystem::wpath _path){boost::filesystem::wrecursive_directory_iterator itr_end;for (boost::filesystem::wrecursive_directory_iterator itr_beg(_path);itr_beg != itr_end; ++itr_beg){if (boost::filesystem::is_directory(*itr_beg)){_files_name_vec.push_back(itr_beg->path().wstring());}}}</span>
运行截图:
注意:filesystem库需要编译(不编译直接包含文件也可以),并且它还依赖system库,
1、文件操作:
filesystem库基于path的路径表示提供了基本的文件操作函数,如创建目录
create_directory、文件改名rename、文件删除remove、文件拷贝copy_file等。。
remove只能一次删除一个目录或文件,remove_all可以递归删除。
create_directory只能创建一级目录,create_directories可以一次创建多级目录。
2、文件属性:
函数initial_path()返回程序启动时(进行main()函数)的当前路径
函数current_path()返回当前路径。它和initial_path()返回的都是一个完整路径(绝
对路径);
函数file_size()以字节为单位返回文件的大小;
函数last_write_time()文件的最后修改时间,是一个std::time_t。
last_write_time()还可以额外接受一个time_t参数,修改文件的最后修改时间。就像是
使用linux下的touch命令。
这些函数都要求操作的文件必须存在,否则会抛出异常,file_size()还要求文件必须是
个普通文件is_regular_file(name) == true
此外,函数space()可以返回一个space_info结构,它表明了该路径下的磁盘空间分配
情况
3、路径处理
path类提供了丰富的函数用于处理路径,可以获取文件名、目录名、判断文件属性等等,
path的成员函数string()返回标准格式的路径表示,directory_string()返回文件系统
格式的路径表示,parent_path()、stem()、filename()和extension()分别返回路径
中的父路径、不含扩展名的全路径名、文件名和扩展名。
is_complete()用于检测path是否是一个完整(绝对)路径,这需要依据具体的文件系统
的表示,例如在windows系统的完整路径需要包括盘符。
root_name()、root_directory()、root_path()这三个成员函数用于处理根目录,如果
path中含有根,那么它们分别返回根的名字、根目录和根路径。
relative_path()返回path的相对路径,相当于去掉了root_path()。
根路径的相对路径的这四个函数都有对应的has_xxx()的形式,用来判断是否存在对应的
路径。同样,has_filename()和has_parent_path()用于判断路径是否有文件名或者父
路径。
- C++遍历文件或文件夹
- C、C++文件夹文件遍历
- C++实现遍历指定文件或文件夹
- 遍历某文件夹/盘符下的文件或文件夹,及其数目
- C Windows 读取文件夹 遍历文件
- c遍历所有文件夹中的文件
- linux C语言遍历文件夹所有文件
- [C#] C#解压缩文件或文件夹
- 利用FindFirstFile和FindNextFile查找文件或遍历文件夹
- 遍历递归目录下所有文件或文件夹
- c++遍历文件夹中的图片(或文件)
- java遍历磁盘或文件夹
- C# 使用foreach语句遍历指定文件夹中的所有文件或文件夹
- 遍历文件夹和遍历文件
- c遍历文件夹
- C/C++遍历文件夹
- c 遍历文件夹
- C/C++ 遍历文件夹
- Find them, Catch them poj1703
- 运行时
- 黑马程序员_同步函数
- 网易云音乐用到的开源库
- 泰勒公式(Taylor's Formula)
- C++遍历文件或文件夹
- 算法与数据结构总结
- 本科写过的一些图像处理项目
- Leetcode-161.One Edit Distance
- 黑马程序员_多线程的死锁和多线程下的单例设计模式
- Docker实战(九):Docker安装ELK环境
- 和中位数有关的构造
- CentOS 7 mysql的yum源
- Android Shell command to send broadcast.