日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(九)boost库之文件处理filesystem

發(fā)布時間:2024/4/11 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (九)boost库之文件处理filesystem 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

filesystem庫是一個可移植的文件系統(tǒng)操作庫,它在底層做了大量的工作,使用POSIX標(biāo)準(zhǔn)表示文件系統(tǒng)的路徑,使C++具有了類似腳本語言的功能,可以跨平臺操作目錄、文件,寫出通用的腳本程序。

1.path的構(gòu)造函數(shù)可以接受C字符串和string,也可以是一個指定首末迭代器字符串序列區(qū)間。

2.filesystem提供了一系列的文件名(或目錄)檢查函數(shù)。

3.有豐富的函數(shù)用于獲取文件名、目錄名、判斷文件屬性等等。

4.filesystem庫使用異常來處理文件操作時發(fā)生的錯誤。

5.filesystem庫提供一個文件狀態(tài)類file_status及一組相關(guān)函數(shù),用于檢查文件的各種屬性,如是否存在、是否是目錄、是否是符號鏈接等。

6.filesystem提供了少量的文件屬性操作,如windows下的只讀、歸檔等,Linux下的讀寫權(quán)限等。

7.文件操作,如創(chuàng)建目錄、文件改名、文件刪除、文件拷貝等等。

8.basic_directory_iterator提供了迭代一個目錄下所有文件的功能。

一、path類的基本用法

//注意 /= 和 += 的區(qū)別, /= 表示追加下級目錄, += 僅僅是字符串的串接 path dir("C:\\Windows"); dir /= "System32"; //追加下級目錄 dir /= "services.exe"; std::cout << dir << std::endl; std::cout << dir.string() << std::endl; //轉(zhuǎn)換成std::string 類型 std::cout << dir.root_name()<< std::endl; //盤符名:C: std::cout << dir.root_directory()<< std::endl; //根目錄:"\" std::cout << dir.root_path()<< std::endl; //根路徑:"C:\" std::cout << dir.relative_path()<< std::endl; // 相對路徑:Windows\System32\services.exe std::cout << dir.parent_path()<< std::endl; //上級目錄:C:\Windows\System32 std::cout << dir.filename()<< std::endl; //文件名:services.exe std::cout << dir.stem()<< std::endl; //不帶擴(kuò)展的文件名:services std::cout << dir.extension()<< std::endl; //擴(kuò)展名:.exe

二、常用函數(shù)及異常處理


函數(shù)名?????????????????????????????????????????? 作用

system_complete(path);?????????? 返回完整路徑(相對路徑+當(dāng)前路徑)?
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);????????????????? 返回路徑名對應(yīng)的狀態(tài)?
initial_path();???????????????????????????????????? 得到程序運(yùn)行時的系統(tǒng)當(dāng)前路徑?
current_path();???????????????????????????????? 得到系統(tǒng)當(dāng)前路徑?
current_path(const Path& p);??????? 改變當(dāng)前路徑?
space_info space(const Path& p); 得到指定路徑下的空間信息,space_info 有capacity, free 和 available三個成員變量,分別表示容量,剩余空間和可用空間。?
last_write_time(const Path& p);??? 最后修改時間?
last_write_time(const Path& p, const std::time_t new_time);? 修改最后修改時間?
bool create_directory(const Path& dp);????????????????????????????????????? 建立路徑?
create_hard_link(const Path1& to_p, const Path2& from_p);?
error_code create_hard_link(const Path1& to_p, const Path2& from_p, error_code& ec); 建立硬鏈接?
create_symlink(const Path1& to_p, const Path2& from_p);?
create_symlink(const Path1& to_p, const Path2& from_p, error_code& ec);? 建立軟鏈接?
remove(const Path& p, system::error_code & ec = singular );????? 刪除文件?
remove_all(const Path& p);?????????????????????????????????????????????????????????????????? 遞歸刪除p中所有內(nèi)容,返回刪除文件的數(shù)量?
rename(const Path1& from_p, const Path2& to_p);???????????????????????? 重命名?
copy_file(const Path1& from_fp, const Path2& to_fp);??????????????????? 拷貝文件?
omplete(const Path& p, const Path& base=initial_path<Path>()); 以base以基,p作為相對路徑,返回其完整路徑?
create_directories(const Path & p);?????????????????????????????????????????????????????? 建立路徑

//常用函數(shù)及異常 try { path dir2("c:\\Windows\\System32"); assert(is_directory(dir2)); //判斷是否一個目錄 assert(exists(dir2)); //判斷目錄是否存在 } catch(filesystem_error& e) { std::cout << e.path1() << std::endl; std::cout << e.what() << std::endl; }

三、目錄迭代

boost庫提供了兩個迭代器

directory_iterator :只支持本層目錄遍歷

recursive_directory_iterator :支持深度遍歷

輸出指定目錄下的文件:

path dir2("c:\\Windows\\System32"); directory_iterator end; for (directory_iterator pos(dir2); pos != end; pos++) { std::cout << *pos << std::endl; }

使用深度遍歷

typedef recursive_directory_iterator rd_iterator; path dir2("E:\\Student"); rd_iterator end; for (rd_iterator pos(dir); pos != end; pos++) { //如果深度大于4層,則不再繼續(xù)深入 if (is_directory(*pos) && pos.level() > 4) { pos.no_push(); } //如果該目錄下有nofind.txt文件,則跳出該目錄 if (*pos == "nofind.txt") { pos.pop(); } }

?

四、示例

找出指定目錄及子目錄下匹配的文件

#include <iostream> #include <boost/filesystem.hpp> #include <boost/xpressive/xpressive_dynamic.hpp> #include <boost/algorithm/string.hpp> #include <vector> using namespace boost::filesystem; using namespace boost::xpressive; typedef recursive_directory_iterator rd_iterator; //獲取過濾的文件 void GetFilterFile(const std::string& filter,std::vector<path>& vecFile) { path filterPath = dir / filter; path filterDir1 = filterPath.parent_path(); std::string filename = filterPath.filename().string(); //轉(zhuǎn)換文件通配符為正則表達(dá)式 std::string str = boost::replace_all_copy(boost::replace_all_copy(filename, ".", "\\."), "*", ".*"); sregex reg = sregex::compile(str); if (!exists(filterDir1) || !is_directory(filterDir1)) { return; } //查找當(dāng)前目錄及子目錄的所有文件,如果符合正則表達(dá)式則添加到列表中 rd_iterator end; for (rd_iterator pos(filterDir1); pos != end; pos++) { if (!is_directory(*pos) && regex_match(pos->path().filename().string(), reg)) { vecFile.push_back(pos->path()); } } }

總結(jié)

以上是生活随笔為你收集整理的(九)boost库之文件处理filesystem的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丰满人妻一区二区三区免费视频 | 91在线高清视频 | 我的公把我弄高潮了视频 | av在线导航 | 91精品国产乱码 | 亚洲成人aaa | 久久国产成人精品 | 男同激情视频 | jizz免费 | 国产成人午夜高潮毛片 | 欧美呦交 | 午夜av免费看 | 999久久 | 国产三级在线观看视频 | 国产精品久久不卡 | 天堂av一区二区三区 | 1024中文字幕 | 夜夜夜操 | 国产麻豆成人传媒免费观看 | 夜夜操天天干 | 一区二区视频在线观看免费 | av网天堂 | 亚洲视频综合网 | 天堂在线91 | 国产精品xxx在线 | 亚洲精品久久久久久久久久久久久 | 四房婷婷 | 闺蜜张开腿让我爽了一夜 | 伊人成人在线视频 | 久久久久久久极品内射 | 亚洲成人福利 | 动漫美女隐私无遮挡 | 精品人妻少妇嫩草av无码专区 | 小视频在线看 | 国产在线一区二区三区 | 国产又粗又长又大 | 欧美又粗又长 | 伊人久艹| 亚洲卡一卡二卡三 | 新x8x8拨牐拨牐永久免费影库 | 91精品免费视频 | 伊人av综合网 | 97超碰总站| av在线播放网址 | 久久精品国产亚洲AV黑人 | 一本之道久久 | 97久久精品人人澡人人爽 | av无码av天天av天天爽 | av电影在线观看不卡 | av中亚| 黄色一级片a | 超碰88| 欧美激情亚洲激情 | 国产av无码国产av毛片 | 国产网址在线 | 久久久久婷婷 | 国产精品电影院 | av动漫免费观看 | 9·1·黄·色·视·频 | 最新黄网 | 亚洲色偷偷色噜噜狠狠99网 | 夜夜嗨aⅴ一区二区三区 | 99riav国产精品视频 | 黄色天堂 | 亚洲精品在线视频免费观看 | 欧洲在线一区 | 国内激情视频 | 污污视频免费网站 | 激情六月婷| 人妻av一区二区 | 免费观看成人毛片 | 中日韩免费视频 | 男生操女生在线观看 | 在线不卡免费视频 | 放荡闺蜜高h苏桃情事h | av片观看| 欧美一区二区三区在线免费观看 | 日韩中文欧美 | 欧洲精品久久久久毛片完整版 | 欧美日韩一区二区三区电影 | 久久国产香蕉 | 在线黄色大片 | 久久久久久久久国产精品 | 国产精品黄色在线观看 | 久久乐国产精品 | 成人中文字幕+乱码+中文字幕 | 91麻豆蜜桃一区二区三区 | 五月婷婷天 | 欧美特黄一级 | 午夜影院一区二区 | 99久久综合网 | 国产精品综合久久 | 成人av在线电影 | 香蕉久久夜色 | 国产日韩二区 | 亚洲高清视频免费观看 | jizz内谢中国亚洲jizz | 国产伦精品一区二区三区免费迷 | 亚洲精品乱码久久 |