boost::filesystem使用方法,根据路径创建文件夹

  • filesystem库提供了两个头文件,一个是<boost/filesystem.hpp>,这个头文件包括基本的库内容。它提供了对文件系统的重要操作。

    同一时候它定义了一个类path。正如大家所想的。这个是一个可移植的路径表示方法,它是filesystem库的基础。

  • 一个是<boost/filesystem/fstream.hpp>。是对std::fstream的一个补充,使用能够使用类boost::path作为参数。从而使得filesystem库与标准库的关系更亲热。
  • 由于文件系统对于大多数系统来说都是共享的,所以不同的进程能够同一时候操作同一个对象,因此filesysetm不提供这方面的特性保证。

    当然这样的保证也是不可能的。或者至少昂贵的。

  • filesystem在不论什么时候,仅仅要不能完毕对应的任务。它都可能抛出 basic_filesystem_error异常。当然并不是总会抛出异常。由于在库编译的时候能够关闭这个功能。同一时候有两个函数提供了无异常版本号。这是由于在任务不能完毕时并不是是异常。
  • filesystem库的全部内容定义在boost名字空间的一个下级名字空间里,它叫boost::filesytem。在使用boost.filesytem之后,链接时须要加“-lboost_filesystem-mt”选项,由于这个须要额外的链接,并不是一个纯头文件的库。
  • 本文中所用boost库为1_54
    #include<boost/filesystem.hpp> 
    
    {
    	boost::filesystem::path path("/test/test1");   //初始化 
    	boost::filesystem::path old_cpath = boost::filesystem::current_path(); //取得当前程序所在文件夹  
    	boost::filesystem::path parent_path = old_cpath.parent_path();//取old_cpath的上一层父文件夹路径 
    	boost::filesystem::path file_path = old_cpath / "file"; //path支持重载/运算符
    	if(boost::filesystem::exists(file_path))  //推断文件存在性  
    	{  
    		std::string strPath = file_path.string();
    		int x = 1;
    	} 
    	else 
    	{  
    		//文件夹不存在;   
    		boost::filesystem::create_directory(file_path);  //文件夹不存在。创建 
    	}  
    	bool bIsDirectory = boost::filesystem::is_directory(file_path); //推断file_path是否为文件夹
    	boost::filesystem::recursive_directory_iterator beg_iter(file_path);
    	boost::filesystem::recursive_directory_iterator end_iter;
    	for (; beg_iter != end_iter; ++beg_iter)
    	{
    		if (boost::filesystem::is_directory(*beg_iter))
    		{
    			continue;
    		}
    		else
    		{	
    			std::string strPath = beg_iter->path().string();  //遍历出来的文件名称
    			int x=1;
    		}
    	}
    	boost::filesystem::path new_file_path = file_path / "test.txt";
    	if(boost::filesystem::is_regular_file(new_file_path))	//推断是否为普通文件
    	{  
    		UINT sizefile = boost::filesystem::file_size(new_file_path);  //文件大小(字节)
    		int x =1;
    	}   
    	boost::filesystem::remove(new_file_path);//删除文件new_file_path  
    }
    

    //根据文件夹路径创建文件

  • 
    bool MakeFullPathDir(const string& path)
    	{
    		if (path.empty())
    		{
    			return false;
    		}
    
    		size_t uPos = path.find_first_of("/\\");
    		while (uPos != string::npos)
    		{
    			string dir = path.substr(0, uPos + 1);
    			boost::system::error_code ec;
    			boost::filesystem::create_directory(dir, ec);
    
    			uPos = path.find_first_of("/\\", uPos + 1);
    		}
    		boost::system::error_code ec;
    		boost::filesystem::create_directory(path, ec);
    
    		return true;
    	}

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章