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

履歴 編集

function
<filesystem>

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

path& remove_filename();

概要

パスからファイル名を除去する。

効果

現在のパスから、filename()関数で取得できるファイル名部分を削除する。

ファイル名を持たないパスに対しては、なにもしない。

戻り値

*this

事後条件

POSIXベースシステムでの例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  fs::path ps[] = {
    "foo/bar", // ファイル名を含むパス (ディレクトリ区切り文字が残って "foo/" になる)
    "foo/",    // ディレクトリパス
    "/foo",    // ルートパス直下のファイルパス
    "/"        // ルートパスのみ
  };

  for (fs::path& p : ps) {
    const fs::path before = p;

    p.remove_filename();
    std::cout << before << " : " << p << std::endl;
  }
}

出力

"foo/bar" : "foo/"
"foo/" : "foo/"
"/foo" : "/"
"/" : "/"

Windowsでの例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  fs::path ps[] = {
    "foo/bar", // ファイル名を含むパス (ディレクトリ区切り文字が残って "foo/" になる)
    "foo/",    // ディレクトリパス
    "C:/foo",  // ルートパス直下のファイルパス
    "C:/"      // ルートパスのみ
  };

  for (fs::path& p : ps) {
    const fs::path before = p;

    p.remove_filename();
    std::cout << before << " : " << p << std::endl;
  }
}

出力

"foo\bar" : "foo\"
"foo\" : "foo\"
"C:\foo" : "C:\"
"C:\" : "C:\"

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

バージョン

言語

  • C++17

処理系