每一部分都单独注释的,运行时取消注释,将其他部分注释起来就可以。
第一部分:路径
#include <boost/filesystem.hpp>
#include <iostream>
#include "boost/filesystem/path.hpp"
#define BOOST_FILESYSTEM_DEPRECATED
int test1()
{
//可以通过传入一个字符串至 boost::filesystem::path 类来构建一个路径。
//boost::filesystem::path p1("C:\\");
//boost::filesystem::path p2("C:\\Windows");
//boost::filesystem::path p3("F:\\Program Files");
//构造函数不会实际验证所提供路径的有效性,或检查给定的文件或目录是否存在。
//boost::filesystem::path 只是处理字符串罢了;文件系统没有被访问到。
/*boost::filesystem::path p1("...");
boost::filesystem::path p2("\\");
boost::filesystem::path p3("@:");*/
//提供了一些方法来以字符串方式获取一个路径。 有趣的是,有三种不同的方法。
//boost::filesystem::path p("C:\\Windows\\System");\
string() 方法返回一个所谓的可移植路径。
//std::cout << p.string() << std::endl;
//使用一个可移植路径来初始化
/*boost::filesystem::path p("/");
std::cout << p.string() << std::endl;*/
//************提供了几个方法来访问一个路径中的特定组件。
//boost::filesystem::path p("I:\\charon\\tool\\lib");
根目录的名字(I:)、返回(\),返回(I:\) 返回(charon\tool\lib)父路径(I:\charon\tool)、文件名(lib)
// std::cout << p.root_name() << std::endl;
//std::cout << p.root_directory() << std::endl;
//std::cout << p.root_path() << std::endl;
//std::cout << p.relative_path() << std::endl;
//std::cout << p.parent_path() << std::endl;
//std::cout << p.filename() << std::endl;
//
//*****检查一个路径中是否包含某个特定子串。
/*
has_root_name(), has_root_directory(), has_root_path(),
has_relative_path(), has_parent_path() 和 has_filename()。
各个方法都是返回一个 bool 类型的值。
*/
/*
*********
用于将一个文件名拆分为各个组件。 它们应当仅在 has_filename() 返回 true 时使用。
否则只会返回一个空字符串,因为如果没有文件名就没什么可拆分了。
*/
/*boost::filesystem::path p("photo.jpg");
std::cout << p.stem() << std::endl;
std::cout << p.extension() << std::endl;*/
//对组件本身进行迭代。(该程序将相继输出 C:, /, Windows 和 System。)不建议使用
/*boost::filesystem::path p("C:\\Windows\\System");
for (boost::filesystem::path::iterator it = p.begin(); it != p.end(); ++it)
std::cout << *it << std::endl;*/
//修改路径信息的方法。
//使用重载的 operator/=() 操作符,这个例子将一个路径添加到另一个之上。
/*boost::filesystem::path p("C:\\");
p /= "Windows\\System";
std::cout << p.string() << std::endl;*/
//除了 operator/=(),Boost.Filesystem 只提供了 remove_filename() 和 replace_extension() 方法来修改路径信息。
boost::filesystem::path p("photo.jpg");
//更改后缀
p.replace_extension(".mv");
std::cout << p.string() << std::endl;
//std::cout << p.stem() << std::endl;
//std::cout << p.extension() << std::endl;
system("pause");
return 0;
}
第二部分:文件与目录
#include <boost/filesystem.hpp>
#include <iostream>
#include <windows.h>
//在失败的情况下,将抛出一个类型为 boost::filesystem::filesystem_error 的异常。
/*
除了继承自父类的 what() 和 code() 方法以外,还有另外两个方法:path1() 和 path2()。
有两个变体,在失败时,一个会抛出类型为 boost::filesystem::filesystem_error 的异常,
而另一个则返回类型为 boost::system::error_code 的对象。 对于后者,需要对返回值进行明确的检查以确定是否出错。
*/
int main()
{
//它可以查询一个文件或目录的状态。
/*
还有其它函数,如 boost::filesystem::is_regular_file(),
boost::filesystem::is_symlink() 和 boost::filesystem::exists(),
它们都会返回一个 bool 类型的值。
********
另一个名为 boost::filesystem::symlink_status() 的函数可用于查询一个符号链接的状态。
在此情况下,实际上查询的是符号链接所指向的文件的状态。在 Windows 中,符号链接以 lnk 文件扩展名识别。
*/
/*boost::filesystem::path p("C:\\charon\\tool\\lib");
try
{
boost::filesystem::file_status s = boost::filesystem::status(p);
std::cout << boost::filesystem::exists(s) << std::endl;
}
catch (boost::filesystem::filesystem_error &e)
{
std::cerr << e.what() << std::endl;
}*/
//可用于查询文件和目录的属性。
//boost::filesystem::path p("C:\\Windows\\win.ini");
//try
//{
// //boost::filesystem::file_size() 以字节数返回一个文件的大小。
// //std::cout << boost::filesystem::file_size(p) << std::endl;
//
//
// //获得一个文件最后被修改的时间,
// std::time_t t = boost::filesystem::last_write_time(p);
// std::cout << std::ctime(&t) << std::endl;
//}
//catch (boost::filesystem::filesystem_error &e)
//{
// std::cerr << e.what() << std::endl;
//}
//boost::filesystem::path p("C:\\");
//try
//{
// //boost::filesystem::space() 用于取回磁盘的总空间和剩余空间。
// boost::filesystem::space_info s = boost::filesystem::space(p);
// std::cout << s.capacity << std::endl;
// std::cout << s.free << std::endl;
// std::cout << s.available << std::endl;
//}
//catch (boost::filesystem::filesystem_error &e)
//{
// std::cerr << e.what() << std::endl;
//}
/*
文件的创建,删除,改名
还有其它的函数,如 create_symlink() 用于创建符号链接,以及 copy_file() 用于复制文件或目录。
*/
/*boost::filesystem::path p("C:\\Test");
try
{
if (boost::filesystem::create_directory(p))
{
boost::filesystem::rename(p, "C:\\Test2");
boost::filesystem::remove("C:\\Test2");
}
}
catch (boost::filesystem::filesystem_error &e)
{
std::cerr << e.what() << std::endl;
}*/
//*******基于一个文件名或一小节路径来创建一个绝对路径。
//try
//{
// //基于一个文件名或一小节路径来创建一个绝对路径。
// //std::cout << boost::filesystem::complete("photo.jpg") << std::endl;
// //取出一个相对于其它目录的绝对路径,
// std::cout << boost::filesystem::complete("photo.jpg", "D:\\") << std::endl;
//}
//catch (boost::filesystem::filesystem_error &e)
//{
// std::cerr << e.what() << std::endl;
//}
//try
//{
// //用于取出当前工作目录
// std::cout << boost::filesystem::current_path() << std::endl;
// SetCurrentDirectory("C:\\");
// std::cout << boost::filesystem::current_path() << std::endl;
//}
//catch (boost::filesystem::filesystem_error &e)
//{
// std::cerr << e.what() << std::endl;
//}
/*
#include <boost/filesystem/fstream.hpp>
#include <iostream>
*/
//文件流
boost::filesystem::path p("test.txt");
boost::filesystem::ofstream ofs(p);
ofs << "Hello, world!" << std::endl;
system("pause");
return 0;
}