首页 > 解决方案 > C++ std::filesystem::directory_iterator cout 是否带有附加引号?

问题描述

我有一个关于filesystem和的问题directory_iterator

这是一个简单的测试代码

#include <string>
#include <iostream>
#include <filesystem>


int main()
{
    
    std::string path = ".";
    for(const auto &entry: std::filesystem::directory_iterator(path))
    {
        std::cout << entry.path() << std::endl;
        std::string path_string = entry.path();
        std::cout << path_string << " " << path_string.size() << std::endl;
    }


    return 0;
}

运行此代码会产生如下输出

"./main.cpp"
./main.cpp
10

似乎是从返回entry.path()的类型进行隐式转换到通过在输出周围cout.operator<<添加额外" "字符的类型,而直接转换为std::string对象,这不会发生。

为什么是这样?这是 C++ 17 的错误吗?

标签: c++filesystems

解决方案


目的是,见std::filesystem::path::operator <<

在路径 p 上执行流输入或输出。std::quoted用于使空格在以后由流输入运算符读取时不会导致截断。


推荐阅读