boost教程(九):文件系统

每一部分都单独注释的,运行时取消注释,将其他部分注释起来就可以。

第一部分:路径

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值