boost-文件路径操作filesystem

boost-文件路径操作filesystem

2023年7月3日发(作者:)

boost-⽂件路径操作stem 库为对路径、⽂件和⽬录进⾏查询和操作提供了可移植的⼯具,已经被C++标准委员会接纳包含到TR2中。编译使⽤stem 库之前要先编译它,请参考《Boost的编译》头⽂件#include 所有stem库的内容都处于名空间boost::filesystem之内。认识basic_path类在stem库⾥basic_path是最重要的类,它以系统⽆关的⽅式保存路径、⽂件名。象std::basic_string ⼀样,针对char和wchar_t,分别特化了path和wpath。basic_path的构造函数:basic_path( const string_type & s );

basic_path( const value_type * s );

template basic_path(InputIterator s, InputIterator last);输⼊参数是⼀个字符串(或字符迭代器),表⽰路径名,可以输⼊系统原⽣路径名或可移植路径名原⽣路径名没啥好说的,⽐如C:Windows; D:等可移植路径名的定义和Unix的路径定义相同,以“/”作为路径分隔符。basic_path成员函数:成员函数template basic_path& append(InputIterator first,InputIterator last);basic_path& remove_filename();basic_path& replace_extension( const string_type & new_extension = "" );string_type string()string_type file_string()string_type directory_string()string_type root_name() const;string_type root_directory() const;basic_path root_path() const;basic_path relative_path() const;string_type filename() const;basic_path parent_path() const;string_type stem(const Path & p) const;string_type extension(const Path & p) const;bool empty() const;bool is_complete() const;作⽤将字符串 s 或字符序列 [first,last) 中的路径元素追加到保存的路径中。去除路径中的⽂件名替换扩展名得到可移植路径名得到系统原⽣⽂件名得到系统原⽣路径名得到根名得到根⽬录得到根路径:根名+根⽬录得到相对路径得到⽂件名得到⽗路径:根路径+相对路径得到不带扩展名的⽂件名得到扩展名path未赋值是否是完整路径bool is_complete() const;bool has_root_path() const;bool has_root_name() const;bool has_root_directory() const;bool has_relative_path() const;bool has_filename() const;bool has_branch_path() const;是否是完整路径路经中是否包含指定的项

测试代码:1. #include "boost/" // 包含所有需要的 stem 声明2. #include // 使⽤ std::cout3. namespace fs = boost::filesystem;4. // 宏FSTEST:测试f的成员函数,输出成员函数名和结果5. #define FSTEST(x) std::cout << #x##": " << f.x << std::endl6. int main()7. {8. fs::path f("");9.

10. FSTEST(string());11. FSTEST(file_string());12. FSTEST(directory_string());13. FSTEST(root_name());14. FSTEST(root_directory());15. FSTEST(root_path());16. FSTEST(relative_path());17. FSTEST(filename());18. FSTEST(parent_path());19. FSTEST(stem());20. FSTEST(extension());21.

22. FSTEST(replace_extension("new"));23. char buf[]="hello";24. FSTEST(append(buf, buf+sizeof(buf)));25. FSTEST(remove_filename());26.

27. return 0;28. }

输出:string(): /folder1/folder2/folder3/

file_string():

directory_string():

root_name():

root_directory(): /

root_path(): /

relative_path(): folder1/folder2/folder3/

filename():

parent_path(): /folder1/folder2/folder3

stem(): filename

extension(): .ext

replace_extension("new"): /folder1/folder2/folder3/

append(buf, buf+sizeof(buf)): /folder1/folder2/folder3//hello

remove_filename(): /folder1/folder2/folder3//

常⽤函数函数名system_complete(path);exists(path);is_directory(path);is_directory(file_status);is_regular_file(path);is_regular_file(file_status);is_symlink(path);is_symlink(file_status);file_status status(path);template const Path& initial_path();template Path current_path();template void current_path(const Path& p);作⽤返回完整路径(相对路径+当前路径)⽂件是否存在是否是路径是否是普通⽂件是否是⼀个链接⽂件返回路径名对应的状态得到程序运⾏时的系统当前路径得到系统当前路径改变当前路径得到指定路径下的空间信息,space_info 有capacity, free 和available三个成员变量,分别表⽰容量,剩余空间和可⽤空间。最后修改时间template space_info space(const Path& p);template std::time_t last_write_time(const Path& p);template void last_write_time(const Path& p, conststd::time_t new_time);template bool create_directory(const Path& dp);template void create_hard_link(constPath1& to_p, const Path2& from_p);template error_code create_hard_link(constPath1& to_p,

const Path2& from_p, error_code& ec);template void create_symlink(const Path1&to_p, const Path2& from_p);template error_code create_symlink(constPath1& to_p, const Path2& from_p, error_code& ec);

template void remove(const Path& p, system::error_code& ec = singular );template unsigned long remove_all(const Path& p);修改最后修改时间建⽴路径建⽴硬链接建⽴软链接删除⽂件递归删除p中所有内容,返回删除⽂件的数量template void rename(const Path1&from_p, const Path2& to_p);template void copy_file(const Path1&from_fp, const Path2& to_fp);template Path complete(const Path& p, const Path&base=initial_path());template bool create_directories(const Path & p);重命名拷贝⽂件以base以基,p作为相对路径,返回其完整路径建⽴路径

路径迭代器basic_directory_iterator构造函数:explicit basic_directory_iterator(const Path& dp);

basic_directory_iterator();basic_directory_iterator 从构造参数得到⽬录,每⼀次调⽤ operator++,它就查找并得到下⼀个⽂件名直到⽬录元素的末尾。不带参数的构造函数 basic_directory_iterator() 总是构造⼀个 end 迭代器对象,它是唯⼀⼀个⽤于结束条件的合法迭代器。⽰例代码,得到指定⽬录下的所有⽂件名:1. void find_file( const fs::path & dir_path )2. {3. if ( !fs::exists( dir_path ) ) return;4. fs::directory_iterator end_itr; // 缺省构造⽣成⼀个结束迭代器5. for ( fs::directory_iterator itr( dir_path );6. itr != end_itr;7. ++itr )8. {9. if ( fs::is_directory(itr->status()) )10. {11. find_file( itr->path() ); //递归查找12. }13. else14. {15. std::cout << *itr << std::endl;16. }17. }18. }

basic_recursive_directory_iterator递归遍历⽬录的迭代器,它的构造参数与basic_directory_iterator相同,当调⽤ operator++时,如果当前值是⼀个⽬录,则进⼊下⼀级⽬录。它有三个成员函数:函数名int level() const;void pop();void no_push();作⽤得到当前搜索深度调⽤pop()后,下⼀次递增就会直接返回上⼀级⽬录调⽤no_push()后,即便下⼀个元素是⽬录类型也不进⼊⽰例代码,得到指定⽬录下的所有⽂件名(和上例作⽤相同):1. void find_file2( const fs::path & dir_path )2. {3. fs::recursive_directory_iterator end_itr; // 缺省构造⽣成⼀个结束迭代器4. for ( fs::recursive_directory_iterator itr( dir_path );5. itr != end_itr;6. ++itr )7. {8. std::cout << () << *itr << std::endl;9. }10. }

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688383082a129761.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信