boost/filesystem 涉及到两个头文件

  • <boost/filesystem.hpp>
    主要用到的,主要介绍的是这个

  • <boost/filesystem/fstream.hpp>
    和<fstream>接口类似,不同的是和路径有关的参数从string/const char*变成了path

这里是最简单的说明,抛弃了模版的形式,使用最常见的调用

class path

boost::filesystem::path

构造函数和赋值函数
模板,会把数据转为内部形式,但不会进行化简("foo/.//../bar" not change)

path::path(const string/path& source);
path::path(InputIterator begin, InputIterator end);
path& path::operator=(const string/path& source);
path& path::operator=(InputIterator begin, InputIterator end);

join函数
模板,可以正确处理分割("hello"/"world" -> "hello/world")

path& path::operator/=(const string/path& source);
path operator/ (const path& lhs, const path& rhs);
path& path::append(const string/path& source);
path& path::append(InputIterator begin, InputIterator end);

concat函数
模板,单纯相连,不处理分割("hello"+"world" -> "helloworld", "hello/"+"/world" -> "hello//world")

path& path::operator+=(const string/path& source);
path& path::concat(const string/path& source);
path& path::concat(InputIterator begin, InputIterator end);

获取path内容

// eg. //root/path/file
path path::root_name() const; // //root
bool path::has_root_name() const;
path path::root_directory() const // /
bool path::has_root_directory() const;
path path::root_path() const; // //root/ <= join(//root, /)
bool has_root_path() const;

path path::relative_path() const; // path/file
bool path::has_relative_path() const;
path path::parent_path() const; // //root/path (dir/ -> dir)
bool path::has_parent_path() const;

path path::filename() const; // file (. -> ., / -> .)
bool path::has_filename() const;
path path::stem() const; // stem.extension == filename
bool path::has_stem() const;
path path::extension() const; // stem.extension == filename
bool path::has_extension() const;
bool is_absolute() const; // root_path
bool is_relative() const;

修改path内容

void path::clear();
void path::swap(path& rhs);
void swap(path& lhs, path& rhs);
path& path::make_preferred();
// WIN: path/file -> path\file
path& path::remove_filename();
// path/dir/ -> path/dir, path/file -> path
path& path::replace_extension(const string/path& new_extension="");
// /dir/file.replace_extension(".abc") -> /dir/file.abc

按成分分析path(boost 1.60)

path path::lexically_normal() const;
path lexically_normal(const path&);
// foo/../bar -> bar
path path::lexically_relative(const path& base) const;
path lexically_relative(const path& p, const path& base);
// a/d, a/b/c -> ../../d

返回path内容

// 原样返回
const string& path::native() const;
const char* path::c_str() const;
size_t path::size() const; // in 1.60
bool path::empty() const;
string path::string() const;
wstring path::wstring() const;
u16string path::u16string() const; // in 1.60
u32string path::u32string() const; // in 1.60
// generic,同原样返回
string path::generic_string() const;
wstring path::generic_wstring() const;
u16string path::generic_u16string() const;
u32string path::generic_u32string() const;

比较path内容

// 原样比较,单纯文本比较
int path::compare(const string/path&) const;
// -1 mean self < other, 0 mean equal, 1 mean >
bool operator< (const path& lhs, const path& rhs);
bool operator<=(const path& lhs, const path& rhs);
bool operator> (const path& lhs, const path& rhs);
bool operator>=(const path& lhs, const path& rhs);
bool operator==(const path& lhs, const path& rhs);
bool operator!=(const path& lhs, const path& rhs);

迭代

iterator path::begin() const;
iterator path::end() const;
reverse_iterator path::rbegin() const;
reverse_iterator path::rend() const;

class file_status

boost::filesystem::file_status


winterdawn
108 声望1 粉丝