名前空間
変種
操作

std::filesystem::create_symlink, std::filesystem::create_directory_symlink

From cppreference.com
 
 
 
ヘッダー <filesystem> で定義
void create_symlink( const std::filesystem::path& target,
                     const std::filesystem::path& link );
(1) (C++17以降)
void create_symlink( const std::filesystem::path& target,

                     const std::filesystem::path& link,

                     std::error_code& ec ) noexcept;
(2) (C++17以降)
void create_directory_symlink( const std::filesystem::path& target,
                               const std::filesystem::path& link );
(3) (C++17以降)
void create_directory_symlink( const std::filesystem::path& target,

                               const std::filesystem::path& link,

                               std::error_code& ec ) noexcept;
(4) (C++17以降)

パス link を、POSIX の symlink() と同様に、ターゲットを target に設定したシンボリックリンクとして作成します。パス名 target は無効であるか、存在しない場合があります。

一部のオペレーティングシステムでは、ディレクトリへのリンクであることを示すためにシンボリックリンクの作成が必要です。移植性の高いコードは、POSIX システムでの区別がない場合でも、(1,2) ではなく、(3,4) を使用してディレクトリシンボリックリンクを作成すべきです。

目次

[編集] パラメータ

target - シンボリックリンクが指すパス。存在する必要はありません
link - 新しいシンボリックリンクのパス
エラーコード - 例外を投げないオーバーロードでのエラー報告のための出力パラメータ

[編集] 戻り値

(なし)

[編集] 例外

noexcept とマークされていないオーバーロードは、メモリ割り当てが失敗した場合に std::bad_alloc をスローする可能性があります。

1,3) 基本となる OS API エラーが発生した場合、target を最初のパス引数、link を 2 番目のパス引数、OS エラーコードをエラーコード引数として構築された std::filesystem::filesystem_error をスローします。
2,4) OS API呼び出しが失敗した場合、OS APIのエラーコードを `std::error_code&` パラメータに設定し、エラーが発生しなかった場合は `ec.clear()` を実行します。

[編集] 注意

一部のオペレーティングシステムでは、シンボリックリンクをまったくサポートしていないか、通常のファイルに対してのみサポートしています。

一部のファイルシステムでは、オペレーティングシステムにかかわらずシンボリックリンクをサポートしていません。たとえば、一部のメモリカードやフラッシュドライブで使用されている FAT システムなどです。

ハードリンクと同様に、シンボリックリンクはファイルが複数の論理名を持つことを可能にします。ハードリンクの存在は、元の名前が削除された後でも、ファイルの存在を保証します。シンボリックリンクは、そのような保証を提供しません。実際、target 引数によって名前が付けられたファイルは、リンクが作成されたときに存在する必要はありません。シンボリックリンクはファイルシステム境界を越えることができます。

[編集]

#include <cassert>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
 
int main()
{
    fs::create_directories("sandbox/subdir");
    fs::create_symlink("target", "sandbox/sym1");
    fs::create_directory_symlink("subdir", "sandbox/sym2");
 
    for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it)
        if (is_symlink(it->symlink_status()))
            std::cout << *it << "->" << read_symlink(*it) << '\n';
 
    assert(std::filesystem::equivalent("sandbox/sym2", "sandbox/subdir"));
    fs::remove_all("sandbox");
}

実行結果の例

"sandbox/sym1"->"target"
"sandbox/sym2"->"subdir"

[編集] 関連項目

(C++17)(C++17)
ファイルの属性を決定する
シンボリックリンクのターゲットを確認してファイルの属性を決定する
(関数) [編集]
シンボリックリンクのターゲットを取得する
(関数) [編集]
ハードリンクを作成する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)