• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            兔子的技術博客

            兔子

               :: 首頁 :: 聯系 :: 聚合  :: 管理
              202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

            留言簿(10)

            最新評論

            閱讀排行榜

            評論排行榜

            Boost--filesystem

            頭文件
            #include <boost/filesystem.hpp>
            所有Boost.Filesystem庫的內容都處于名空間boost::filesystem之內。

            認識basic_path類
            在Boost.Filesystem庫里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 <class InputIterator> basic_path(InputIterator s, InputIterator last);輸入參數是一個字符串(或字符迭代器),表示路徑名,可以輸入系統原生路徑名或可移植路徑名
            原生路徑名沒啥好說的,比如C:\Windows; D:\abc\ttt.txt等
            可移植路徑名的定義和Unix的路徑定義相同,以“/”作為路徑分隔符。

            basic_path成員函數:
            成員函數 作用 
            template <class InputIterator>basic_path& append(InputIterator first, InputIterator last); 將字符串 s 或字符序列 [first,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; 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; 路經中是否包含指定的項


            測試代碼:
            #include "boost/filesystem.hpp"   // 包含所有需要的 Boost.Filesystem 聲明 
            #include <iostream>               // 使用 std::cout 
            namespace fs = boost::filesystem; 
            // 宏FSTEST:測試f的成員函數,輸出成員函數名和結果 
            #define FSTEST(x) std::cout << #x##": " << f.x << std::endl 
            int main() 

            fs::path f("\\folder1\\folder2\\folder3\\filename.ext"); 

            FSTEST(string()); 
            FSTEST(file_string()); 
            FSTEST(directory_string()); 
            FSTEST(root_name()); 
            FSTEST(root_directory()); 
            FSTEST(root_path()); 
            FSTEST(relative_path()); 
            FSTEST(filename()); 
            FSTEST(parent_path()); 
            FSTEST(stem()); 
            FSTEST(extension()); 

            FSTEST(replace_extension("new")); 
            char buf[]="hello"; 
            FSTEST(append(buf, buf+sizeof(buf))); 
            FSTEST(remove_filename()); 

            return 0; 
            }


            輸出:
            string(): /folder1/folder2/folder3/filename.ext file_string(): \folder1\folder2\folder3\filename.ext directory_string(): \folder1\folder2\folder3\filename.ext root_name(): root_directory(): / root_path(): / relative_path(): folder1/folder2/folder3/filename.ext filename(): filename.ext parent_path(): /folder1/folder2/folder3 stem(): filename extension(): .ext replace_extension("new"): /folder1/folder2/folder3/filename.new append(buf, buf+sizeof(buf)): /folder1/folder2/folder3/filename.new/hello remove_filename(): /folder1/folder2/folder3/filename.new/

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


            路徑迭代器
            basic_directory_iterator
            構造函數:

            explicit basic_directory_iterator(const Path& dp); basic_directory_iterator();basic_directory_iterator 從構造參數得到目錄,每一次調用 operator++,它就查找并得到下一個文件名直到目錄元素的末尾。不帶參數的構造函數 basic_directory_iterator() 總是構造一個 end 迭代器對象,它是唯一一個用于結束條件的合法迭代器。

            示例代碼,得到指定目錄下的所有文件名:
            void find_file( const fs::path & dir_path ) 

            if ( !fs::exists( dir_path ) ) return; 
            fs::directory_iterator end_itr; // 缺省構造生成一個結束迭代器 
            for ( fs::directory_iterator itr( dir_path ); 
            itr != end_itr; 
            ++itr ) 

            if ( fs::is_directory(itr->status()) ) 

            find_file( itr->path() ); //遞歸查找 

            else 

            std::cout << *itr << std::endl; 


            }


            basic_recursive_directory_iterator
            遞歸遍歷目錄的迭代器,它的構造參數與basic_directory_iterator相同,當調用 operator++時,如果當前值是一個目錄,則進入下一級目錄。
            它有三個成員函數: 函數名 作用 
            int level() const; 得到當前搜索深度 
            void pop(); 調用pop()后,下一次遞增就會直接返回上一級目錄 
            void no_push(); 調用no_push()后,即便下一個元素是目錄類型也不進入

            示例代碼,得到指定目錄下的所有文件名(和上例作用相同):
            void find_file2( const fs::path & dir_path ) 

            fs::recursive_directory_iterator end_itr; // 缺省構造生成一個結束迭代器 
            for ( fs::recursive_directory_iterator itr( dir_path ); 
            itr != end_itr; 
            ++itr ) 

            std::cout << itr.level() << *itr << std::endl; 
            }


            轉自:http://hi.baidu.com/dulamhoo/blog/item/c501e83a48c2bcf4838b1380.html

            posted on 2010-12-29 13:42 會飛的兔子 閱讀(1976) 評論(0)  編輯 收藏 引用 所屬分類: C++庫,組件
            91精品久久久久久无码| 国内精品九九久久精品| 国产精品成人99久久久久 | 国产日韩欧美久久| 久久福利资源国产精品999| 色欲久久久天天天综合网| 国产亚洲婷婷香蕉久久精品| 久久综合色区| 久久午夜电影网| 麻豆一区二区99久久久久| 久久婷婷五月综合色99啪ak| 久久久精品人妻一区二区三区蜜桃| 99久久www免费人成精品| 久久精品国产亚洲av麻豆蜜芽| a高清免费毛片久久| 精品久久久久久中文字幕大豆网| 99久久成人18免费网站| 99久久99久久精品国产片果冻| 精品国产青草久久久久福利| 亚洲中文字幕无码久久精品1 | 久久久久久久波多野结衣高潮 | 中文精品久久久久国产网址| 伊人久久大香线蕉av一区| 久久久艹| 久久精品亚洲精品国产欧美| 热99re久久国超精品首页| 久久久久成人精品无码中文字幕| 国产aⅴ激情无码久久| 无码任你躁久久久久久| 久久人人爽人人爽AV片| 久久这里只有精品视频99| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 国产农村妇女毛片精品久久| 一本大道久久a久久精品综合| 99久久中文字幕| 精品亚洲综合久久中文字幕| 久久久久成人精品无码中文字幕 | 久久99热国产这有精品| 嫩草影院久久国产精品| 大香网伊人久久综合网2020| 久久99国产一区二区三区|