精华内容
下载资源
问答
  • experimental::filesystem::v1::__cxx11::path::path, std::allocator >, std::experimental::filesystem::v1::__cxx11::path>(std::__cxx11::basic_string, std::allocator > const&)': det_config_mzy.cpp:(.text....

    1 问题现象

    编写文件检测函数,对读取的文件,检测是否存在,

    #include <experimental/filesystem>
    bool fileExists(const std::string fileName, bool verbose=true){
        if (!std::experimental::filesystem::exists(std::experimental::filesystem::path(fileName))){
            if (verbose){
                std::cout << "File does not exist : " << fileName << std::endl;
            }    
            return false;
        }
        return true;
    }

    在cmake与make后,出现如下问题:

    CMakeFiles/yolo.dir/media/sf_share/WorkSpace_MZY/Demo_20211207/MZY_20211207_验证版本/yolo_cv_capture_yaml/mzy_feature/src_mzy/det_config_mzy.cpp.o: In function `std::experimental::filesystem::v1::__cxx11::path::path<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::experimental::filesystem::v1::__cxx11::path>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
    det_config_mzy.cpp:(.text._ZNSt12experimental10filesystem2v17__cxx114pathC2INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EERKT_[_ZNSt12experimental10filesystem2v17__cxx114pathC5INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EERKT_]+0x68): undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
    collect2: error: ld returned 1 exit status

    查看:

    undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'

    原因是由于cmakelist中对于库文件没有进行配置,添加如下:

    # filesystem
    target_link_libraries(yolo -lstdc++fs)

    重新cmake与make编译,问题解除。

    展开全文
  • std::filesystem文件系统库提供了文件系统、路径、常规文件、目录等等相关组件进行操作的相关功能。... std::cout << ". Capacity Free Available\n" << "current path: " ...

    std::filesystem文件系统库提供了文件系统、路径、常规文件、目录等等相关组件进行操作的相关功能。和正则表达式库类似,他也是最先由 boost 发起,并最终被合并为 C++ 标准的众多库之一。

    下面来看它的基本类的使用

    path

    (C++17)

    表示路径
    (类)

    directory_entry

    (C++17)

    目录条目
    (类)

    space_info

    (C++17)

    关于文件系统上空闲及可用空间的信息
    (类)

    1.path类的基本使用

    #include <iostream>
    #include <filesystem>
    #include <string>
    
    namespace fs = std::filesystem;
    
    void path_use()
    {
        fs::path currentPath = fs::current_path();
        //获取makefile路径  append operator/ 添加元素到带目录分隔符的路径
        fs::path makefilePath = currentPath / "Makefile.Debug";
        std::cout << "Makefile path      = " << makefilePath.string() << std::endl;
        //分解操作
        //root_name 返回路径的根名
        std::cout << "root_name          = " << currentPath.root_name() << std::endl;
        //root_directory 返回路径的根目录
        std::cout << "root_directory     = " << currentPath.root_directory() << std::endl;
        //root_path 返回路径的根路径
        std::cout << "root_path          = " << currentPath.root_path() << std::endl;
        //relative_path 返回相对根路径的路径
        std::cout << "relative_path      = " << currentPath.relative_path() << std::endl;
        //parent_path 返回亲路径的路径
        std::cout << "parent_path        = " << currentPath.parent_path() << std::endl;
        //filename 返回文件名路径组分
        std::cout << "filename           = " << currentPath.filename() << std::endl;
        //stem 返回主干路径组分
        std::cout << "stem               = " << currentPath.stem() << std::endl;
        //extension 返回文件扩展名路径组分
        std::cout << "extension          = " << currentPath.extension() << std::endl;
        std::cout << "extension          = " << makefilePath.extension() << std::endl;
    
        //查询操作
        //empty 检查路径是否为空
        std::cout << "empty              = " << currentPath.empty() << std::endl;
        //检查对应路径元素是否非空
        std::cout << "has_root_path      = " << currentPath.has_root_path() << std::endl;
        std::cout << "has_root_name      = " << currentPath.has_root_name() << std::endl;
        std::cout << "has_root_directory = " << currentPath.has_root_directory() << std::endl;
        std::cout << "has_relative_path  = " << currentPath.has_relative_path() << std::endl;
        std::cout << "has_parent_path    = " << currentPath.has_parent_path() << std::endl;
        std::cout << "has_filename       = " << currentPath.has_filename() << std::endl;
        std::cout << "has_stem           = " << currentPath.has_stem() << std::endl;
        std::cout << "has_extension      = " << currentPath.has_extension() << std::endl;
    
        //检查 root_path() 是否唯一标识文件系统位置
        std::cout << "is_absolute        = " << currentPath.is_absolute() << std::endl;
        std::cout << "is_relative        = " << currentPath.is_relative() << std::endl;
    }
    
    int main()
    {
        path_use();
        std::cout << std::endl;
        return 0;
    }
    

    运行结果:


    2.directory_entry

    void directory_entry_use()
    {
        //path operator const path& 返回该目录项代表的路径
        fs::path currentPath = fs::current_path();
        //获取makefile路径  append operator/ 添加元素到带目录分隔符的路径
        fs::path makefilePath = currentPath / "Makefile.Debug";
        std::cout << "Makefile path      = " << makefilePath.string() << std::endl;
        fs::directory_entry dirEntry(currentPath);
        //exists 检查 directory_entry 是否代表既存文件系统对象
        std::cout << "exists             = " << dirEntry.exists() << std::endl;
        //is_block_file 检查 directory_entry 是否代表阻塞设备
        std::cout << "is_block_file      = " << dirEntry.is_block_file() << std::endl;
        //is_character_file 检查 directory_entry 是否代表字符设备
        std::cout << "is_character_file  = " << dirEntry.is_character_file() << std::endl;
        //is_directory 检查 directory_entry 是否代表目录
        std::cout << "is_directory       = " << dirEntry.is_directory() << std::endl;
        //is_fifo 检查 directory_entry 是否代表具名管道
        std::cout << "is_fifo            = " << dirEntry.is_fifo() << std::endl;
        //is_other 检查 directory_entry 是否代表其他文件
        std::cout << "is_other           = " << dirEntry.is_other() << std::endl;
        //is_regular_file 检查 directory_entry 是否代表常规文件
        std::cout << "is_regular_file    = " << dirEntry.is_regular_file() << std::endl;
        //is_socket 检查 directory_entry 是否代表具名 IPC 接头
        std::cout << "is_socket          = " << dirEntry.is_socket() << std::endl;
        //is_symlink 检查 directory_entry 是否代表符号链接
        std::cout << "is_symlink         = " << dirEntry.is_symlink() << std::endl;
        //file_size 返回 directory_entry 所指代的文件大小
        std::cout << "file_size          = " << dirEntry.file_size() << std::endl;
        //hard_link_count 返回引用到该  directory_entry 所表示的文件的硬链接数
        std::cout << "hard_link_count    = " << dirEntry.hard_link_count() << std::endl;
    
    }
    
    int main()
    {
        directory_entry_use();
        return 0;
    }

    运行结果:


    3.space_info

    void space_info_use()
    {
        //capacity文件系统的总大小,以字节计
        //free文件系统的空闲空间,以字节计
        //available非特权进程可用的空闲空间(可以小于或等于 free )
        fs::path currentPath = fs::current_path();
        std::cout << "Current path is " << fs::current_path() << std::endl;
        fs::path parentPath = currentPath.parent_path();
        std::cout << "Parent  path is " << parentPath.string() << std::endl;
        fs::space_info devi = fs::space(currentPath);
        fs::space_info tmpi = fs::space(parentPath);
    
        std::cout << ".                 Capacity       Free        Available\n"
                  << "current path:   " << devi.capacity << "   "
                  << devi.free << "   " << devi.available  << '\n'
                  << "parent  path:   " << tmpi.capacity << "   "
                  << tmpi.free << "   " << tmpi.available  << '\n';
    
    }
    
    int main()
    {
        space_info_use();
        return 0;
    }

    运行结果:


     

    参考:
    https://zh.cppreference.com/w/cpp/header/filesystem

    展开全文
  • std::filesystem需要c++17才支持;即要求vs2017或者gcc8.0以上才可以; 一、CMakeLists.txt中打开c++17支持 #set compile options if (MSVC) set( win_std_pre "/std:" ) else() set( linux_std_pre "-std=" ) ...

    std::filesystem需要c++17才支持;即要求vs2017或者gcc8.0以上才可以;

    一、CMakeLists.txt中打开c++17支持

    #set compile options
    if("${CMAKE_SYSTEM_NAME}" STREQUAL "")
        set(CMAKE_SYSTEM_NAME "Windows")  #should in sh or cmake commands add this
    endif()
    if (CMAKE_SYSTEM_NAME MATCHES "Windows")
        set( os_std_pre "/std:" )
    else()
        set( os_std_pre "-std=" )
    endif()
    
    set( str_cxx11 "${os_std_pre}c++11" )
    set( str_cxx17 "${os_std_pre}c++17" )  # above gcc8.0 or msvc2017 
    include(CheckCXXCompilerFlag )
    CHECK_CXX_COMPILER_FLAG( "${str_cxx17}" _cpp_17_flag_supported ) #无语,这个检测函数还不好使
    if ( TRUE )
    #if(_cpp_17_flag_supported )
        set( CMAKE_CXX_STANDARD 17 )
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${str_cxx17}")
        message(STATUS "Using flag -std=c++17.")        
    endif()

     

    二、遍历文件夹

    
    bool FindFilesInFolder(std::string strPath, std::vector<std::string> &vecFiles)
    {
        char cEnd = *strPath.rbegin();
        if (cEnd == '\\' || cEnd == '/')
        {
            strPath = strPath.substr(0, strPath.length() - 1);
        }
    
        if (strPath.empty() || strPath == (".") || strPath == (".."))
            return false;
    
        std::error_code ec;
        std::filesystem::path fsPath(strPath);
        if (!std::filesystem::exists(strPath, ec)) {
            return false;
        }
        //  const std::string str1 = str.path().filename().string();
        //  std::cout << std::filesystem::absolute(str.path()) << '\n'; //绝对路径
        //  std::cout << std::filesystem::absolute(str.path()).string() << '\n';
        for (auto &itr : std::filesystem::directory_iterator(fsPath))
        {
            if (std::filesystem::is_directory(itr.status()))
            {
                FindFilesInFolder(itr.path().string(), vecFiles);
            }
            else
            {
                //if (std::regex_match(filename.string(), fileSuffix))
                //std::filesystem::remove_all(version_dir, ec);
                //std::filesystem::copy_file(from_file, to_file, std::filesystem::copy_options::skip_existing, ec))
                vecFiles.push_back(itr.path().string());
            }
        }
    
        return true;
    }

     

    展开全文
  • std::filesystem 用法

    千次阅读 2020-06-04 17:49:03
    https://www.cnblogs.com/ConfuciusPei/p/12365592.html
    展开全文
  • <div><p>On Windows, <code>boost::filesystem::path::native()</code> will return <code>std::wstring</code> while the code expects <code>std::string, thus I replaced the <code>native()</code> usage with ...
  • C++17 C17 中的新增功能std::filesystem

    千次阅读 2020-08-26 11:16:11
    本文主要介绍C++17 / C17中的filesystem中的一些常用方法。 C17中新增了filesystem功能,使得跨平台文件系统 操作使用便方便简易。 一、windows环境下 使用Visual Studio开发必须要vs2019才支持C++17新特性。 ...
  • 1、主要内容:路径信息的构造、路径信息的拆分、路径信息的修改。 2、示例: ... //路径信息:boost::filesystem::path //构造函数:不验证路径的有效性、不判断文件或目录是否存在 boost::filesystem...
  • boost::filesystem::path

    千次阅读 2018-12-31 18:41:43
    boost::filesystem库的核心类是path类,他屏蔽了不同文件系统的差异,使用了可移植的POSIX语法提供了通用的目录和路径表示,并且支持POSIX的符号链接       boost::filesystem::path       path的构造...
  • e:/Project/VSCODE/C++/library/test.cpp:7: undefined reference to `sssp(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char)' collect2.exe: error: ld...
  • template<typename _CharT, typename _Traits>...std::basic_filebuf是关联字符序列为文件的std::basic_streambuf 输入序列和输出序列都关联到同一文件,并为两种操作维护连接五年级位置 函数u..
  • boost::filesystem::path的用法测试程序实现功能C++实现代码 实现功能 boost::filesystem::path的用法测试程序 C++实现代码 #include <iostream> #include <boost/filesystem.hpp> using namespace std;...
  • 在CentOS系统上安装了gcc4.8.2和gcc7.2两个版本,gcc使用的是4.8.2版本,g++使用的是7.2版本,使用make编译cmake时出现c++11标准库未定义错误,两个版本的编译器使用的库版本也不同,对c++11标准的实现程度也不一样...
  • void filesystem_utils::load(const std::string &path, std::string &buffer, uint32 open_mode /*= std::fstream::in*/) { std::ifstream ifs; ifs.open(path.c_str(), open_mode); if (!ifs.is_open()) ...
  • 已经确定安装成功Boost库,但是用g++编译cpp的时候出错: 查资料说是没有加载进来库链接,需要自己手动添加: g++ -std=c++11 main.cpp -o main -lboost_filesystem -lboost_system 就可以解决问题了~ ...
  • boost::filesystem::path::stem的用法测试程序实现功能C++实现代码 实现功能 boost::filesystem::path::stem的用法测试程序 C++实现代码 #include <boost/filesystem.hpp> #include <iostream> int main...
  • VS2017 C++ filesystem

    2020-04-11 23:25:53
    VS2017 C++ 还没有正式支持filesystem,命名空间是std::experimental::filesystem。 一些常用的方法: #include <iostream> #include <filesystem> #include <fstream> #include <string>...
  • 编译选项没有加 “-std=c++11” 或者是 "-std=c++14" 编译选项没有加 “-pthread” ( 注:不是 -lpthread,不懂的请自行百度 thread、pthread、lpthread、gthread 的区别与联系 ) 正确做法 1. 安装高版本...
  • boost::filesystem文件操作

    千次阅读 2019-12-14 11:11:03
    boost/filesystem.hpp> #include <iostream> #include <boost/ratio.hpp> #include <map> #include <vector> #include <string> #include <memory> #include ...
  • boost::filesystem常用功能

    万次阅读 2017-02-03 15:50:27
    system_complete(path); 返回完整路径(相对路径 + 当前路径) exists(path); 目录是否存在 is_directory(path); is_directory(file_status); 是否是路径 is_empty(path); 文件夹是否为空,必须保证路径存在,否则...
  • 把一个在linux下的程序移植到windows下,在代码中使用到... boost::filesystem::directory_iterator dirItr ( m_path ); boost::filesystem::directory_iterator endItr; std::string imgformat = hp.readStri
  • C++17 filesystem 文件系统(详解)

    万次阅读 多人点赞 2019-06-10 21:04:15
    本文主要介绍C++17中的filesystem中的一些常用方法 一、C++17的支持 ... 二、头文件及命名空间 #include<filesystem>...using namespace std::filesystem; 三、常用类: path 类:说白...
  • BOOST 之filesystem, path

    2020-10-19 17:25:03
    目录[-] 使用 boost::filesystem 的第一个程序 清单 1. 用于确定某个文件的类型是否为 Directory 的... 使用 path::iterator(begin 和 end 接口) 清单 6. 路径字符串的串联 错误处理 清单 7. Boost 中的错误处理
  • boost::fusion名称空间对stl库中常用的集合类进行了元编程的适配。 可以对元编程的集合运行boost::fusion中提供的算法。 例如使用boost::fusion...add_definitions(-std=c++14) include_directories("/usr/local/inclu
  • boost::filesystem

    2019-07-22 14:27:47
    // #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> #include <iostream> using namespace boost::...// boost::filesystem::path 是 Boost.Filesystem 中的...
  • std::string" 到 "int" 的适当转换函数(C++primer中的练习题)错误的做法:#include &lt;iostream&gt; #include &lt;string &gt; #include &lt;vector&gt; using namespace...
  • filesystem一开始集成于c++的boost库,在C++17标准中,终于集成了filesytem。这里,我来使用微软的VS2017 15.7.0 Preview 5.0来测试这个功能。首先我们来引用这两个头文件#include &lt;experimental/filesystem&...
  • 在批量处理文件的时候,存在需要对文件进行下标...boost::filesystem::path newPath = P.parent_path() / boost::filesystem::path(P.stem().string() + "_" + rndString + P.extension().string()); 原始链接: lin
  • boost库中filesystempath的使用

    千次阅读 2018-08-01 17:35:59
    boost库中的filesystem中有关路径的操作十分的方便特别是path重载的/,看起来就像对普通路径的书写一样,你再也不用担心为组合路径时少写‘/’而导致找不到文件或者程序直接崩溃烦恼啦,因为当你缺少时path会自动的给...
  • //std::smatch == std::match_results<std::string::const_iterator> if ( ! std ::regex_match(file_path,result,re) ){ yUpgradeLog_Msg( "std::regex_match false." ); return - 1 ; } yUpgradeLog_...
  • msvc2019使用filesystem

    2021-07-06 08:34:01
    1.如果使用msvc默认设置 #include <experimental/filesystem> 2.如果 c/c++ ==> 语言 ,更改c++语言标准 #include <filesystem>

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,753
精华内容 1,501
关键字:

std::filesystem::path