zoukankan      html  css  js  c++  java
  • boost 文件操作

    void testFileSystem()
    {
        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支持重载/运算符
        std::string file_dir = file_path.string();
        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  
    }
    
    // recusively copy file or directory from $src to $dst 
    void CopyFiles(const boost::filesystem::path &src, const boost::filesystem::path &dst)
    {
        if (!boost::filesystem::exists(dst))
        {
            boost::filesystem::create_directories(dst);
        }
        for (boost::filesystem::directory_iterator it(src); it != boost::filesystem::directory_iterator(); ++it)
        {
            const boost::filesystem::path newSrc = src / it->path();
            const boost::filesystem::path newDst = dst / it->path();
            if (boost::filesystem::is_directory(newSrc))
            {
                CopyFiles(newSrc, newDst);
            }
            else if (boost::filesystem::is_regular_file(newSrc))
            {
                boost::filesystem::copy_file(newSrc, newDst, boost::filesystem::copy_option::overwrite_if_exists);
            }
            else
            {
                _ftprintf(stderr, _T("Error: unrecognized file - %s"), newSrc.string().c_str());
            }
        }
    }
    
    bool CopyDirectory(const std::string &strSourceDir, const std::string &strDestDir)
    {
        boost::filesystem::recursive_directory_iterator end; //设置遍历结束标志,用recursive_directory_iterator即可循环的遍历目录  
        boost::system::error_code ec;
        for (boost::filesystem::recursive_directory_iterator pos(strSourceDir); pos != end; ++pos)
        {
            //过滤掉目录和子目录为空的情况  
            if (boost::filesystem::is_directory(*pos))
                continue;
            std::string strAppPath = boost::filesystem::path(*pos).string();
            std::string strRestorePath;
            //replace_first_copy在algorithm/string头文件中,在strAppPath中查找strSourceDir字符串,找到则用strDestDir替换,替换后的字符串保存在一个输出迭代器中  
            boost::algorithm::replace_first_copy(std::back_inserter(strRestorePath), strAppPath, strSourceDir, strDestDir);
            if (!boost::filesystem::exists(boost::filesystem::path(strRestorePath).parent_path()))
            {
                boost::filesystem::create_directories(boost::filesystem::path(strRestorePath).parent_path(), ec);
            }
            boost::filesystem::copy_file(strAppPath, strRestorePath, boost::filesystem::copy_option::overwrite_if_exists, ec);
        }
        if (ec)
        {
            return false;
        }
        return true;
    }
  • 相关阅读:
    ubuntu安装mysql并使用Navicat连接
    二叉树基础知识点
    Javascript 16进制转有符号的10进制整数
    Node.js 学习笔记(二)
    API测试如何演变为应用程序开发的常规部分
    API在线文档
    API文档自动生成的方法
    快速对比API版本
    如何使用OPENAPI进行质量检查
    【分享】什么是API网关?大公司为什么都有API网关?
  • 原文地址:https://www.cnblogs.com/earvin/p/7456457.html
Copyright © 2011-2022 走看看