# operator<<,>>(std::filesystem::path)

< cpp‎ | filesystem‎ | path

template< class CharT, class Traits > friend std::basic_ostream<CharT,Traits>& operator<<( std::basic_ostream<CharT,Traits>& os, const path& p ); | (1) | (C++17 起)
template< class CharT, class Traits > friend std::basic_istream<CharT,Traits>& operator>>( std::basic_istream<CharT,Traits>& is, path& p ); | (2) | (C++17 起)

进行路径 `p` 上的流输入或输出。使用 std::quoted ，使得之后从流输入运算符读取时空格不导致截断。

这些函数模板对通常无限定或有限定查找不可见，而只能在 `std::filesystem::path` 为参数的关联类时由实参依赖查找找到。这在 using namespace std::filesystem; using 指令存在时阻止不想要的转换。

### 参数

os | - | 要进行输出的流
is | - | 要进行输入的流
p | - | 要插入或释出的路径

### 返回值

1) os
2) is

### 异常

可能抛出实现定义的异常。

### 可能的实现

版本一
    template< class CharT, class Traits >
    friend std::basic_ostream<CharT,Traits>&
        operator<<( std::basic_ostream<CharT,Traits>& os, const path& p )
    {
        os << std::quoted(p.string<CharT,Traits>());
        return os;
    }
版本二
    template< class CharT, class Traits >
    friend std::basic_istream<CharT,Traits>&
        operator>>( std::basic_istream<CharT,Traits>& is, path& p )
    {
        std::basic_string<CharT, Traits> t;
        is >> std::quoted(t);
        p = t;
        return is;
    }

### 示例

    #include <iostream>
    #include <filesystem>
    int main()
    {
        std::cout << std::filesystem::current_path() << '\n';
        std::cout << std::filesystem::temp_directory_path() << '\n';
    }

可能的输出：

    "/home/user"
    "/tmp"

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 2989 | C++17 | 允许在 using 指令存在时插入任何能转换到 `path` 的表达式 | 使之为隐藏的友元