最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<filesystem>

# std::filesystem::path::filename(C++17)

    path filename() const;

## 概要

パスが保持しているファイル名を取得する。

ファイル名とは、ディレクトリ区切り文字で分割された末尾要素のことを指す。そのため、末尾にディレクトリ区切り文字を含まないディレクトリ名もファイル名と見なされる。また、ルートディレクトリはファイル名とは見なされず、ルートパスのみが含まれる場合は空のパスが返る。

カレントディレクトリを表す「`"."` (ドット x 1)」および親ディレクトリを表す「`".."` (ドット x 2)」もまた、ファイル名と見なされる。

## 戻り値

    return relative_path().empty() ? path() : *--end();

## 例

### POSIXベースシステムでの例

    #include <iostream>
    #include <filesystem>

    namespace fs = std::filesystem;

    int main()
    {
      fs::path ps[] = {
        "/foo/bar.txt", // ファイル名を含むパス
        "/foo/bar/",    // ディレクトリパス
        "/",            // ルートパスのみ
        ".",            // カレントディレクトリ
        ".."            // 親ディレクトリ
      };

      for (const fs::path& p : ps) {
        std::cout << p << " : " << p.filename() << std::endl;
      }
    }

#### 出力

    "/foo/bar.txt" : "bar.txt"
    "/foo/bar/" : ""
    "/" : ""
    "." : "."
    ".." : ".."

### Windowsでの例

    #include <iostream>
    #include <filesystem>

    namespace fs = std::filesystem;

    int main()
    {
      fs::path ps[] = {
        "C:/foo/bar.txt", // ファイル名を含むパス
        "C:/foo/bar/",    // ディレクトリパス
        "C:",             // ルートディレクトリ
        ".",              // カレントディレクトリ
        ".."              // 親ディレクトリ
      };

      for (const fs::path& p : ps) {
        std::cout << p << " : " << p.filename() << std::endl;
      }
    }

#### 出力

    "C:/foo/bar.txt" : "bar.txt"
    "C:/foo/bar/" : ""
    "C:" : ""
    "." : "."
    ".." : ".."

## バージョン

### 言語

- C++17

### 処理系

- Clang:
- GCC: 8.1 ✅
- Visual C++: 2017 Update 7 ✅