最終更新日時(UTC):
が更新

履歴 編集

function
<filesystem>

std::filesystem::path::string(C++17)

template <class EcharT,
          class traits = std::char_traits<EcharT>,
          class Allocator = std::allocator<EcharT>>
std::basic_string<EcharT, traits, Allocator>
  string(const Allocator& a = Allocator()) const; // (1)

std::string string() const;                       // (2)

概要

  • (1) : 指定された文字型に対応する文字コードで、パス文字列を取得する
  • (2) : システムのマルチバイト文字コードで、パス文字列を取得する

戻り値

*thisが保持するシステムのネイティブフォーマットを持つパスを、指定された文字型の文字コードで返す。

(1) の場合、戻り値の文字列をメモリアロケートするために、パラメータaのアロケータを使用する。

備考

  • (1) :
    • ECharTcharの場合、システムのマルチバイト文字コードとなる (POSIXベースシステムではUTF-8、Windowsの日本語環境ではCP932)
    • ECharTwchar_tの場合、システムのワイド文字コードとなる (WindowsではUTF-16)
    • ECharTchar16_tの場合、UTF-16エンコーディングとなる
    • ECharTchar32_tの場合、UTF-32エンコーディングとなる
  • (2) :
    • POSIXベースシステムではUTF-8、Windowsの日本語環境ではCP932文字コードとなる

POSIXベースシステムでの例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  fs::path p = "/usr/bin/clang";

  // (1)
  {
    const std::string s = p.string<char>();
    const std::wstring ws = p.string<wchar_t>();
    const std::u16string utf16s = p.string<char16_t>();
    const std::u32string utf32s = p.string<char32_t>();

    std::cout << s << std::endl;
  }

  // (2)
  {
    const std::string s = p.string();
    std::cout << s << std::endl;
  }
}

出力

/usr/bin/clang
/usr/bin/clang

Windowsでの例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  fs::path p = "foo/bar";

  // (1)
  {
    const std::string s = p.string<char>();
    const std::wstring ws = p.string<wchar_t>();
    const std::u16string utf16s = p.string<char16_t>();
    const std::u32string utf32s = p.string<char32_t>();

    std::cout << s << std::endl;
  }

  // (2)
  {
    const std::string s = p.string();
    std::cout << s << std::endl;
  }
}

出力

foo\bar
foo\bar

Windowsでの例は、Visual C++が正式にファイルシステムライブラリをサポートしていないことから、未検証のサンプルコード・出力となっている。

バージョン

言語

  • C++17

処理系