Namespaces
Variants

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

From ja.cppreference.net
ヘッダーで定義 <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 を作成し、そのターゲットを target に設定します。これはPOSIXの symlink() と同様に動作します:パス名 target は無効または存在しない場合があります。

一部のオペレーティングシステムでは、リンクがディレクトリを指すことを識別するためにシンボリックリンクの作成が必要です。ポータブルなコードでは、POSIXシステムでは区別がないにもかかわらず、 (1,2) ではなく (3,4) を使用してディレクトリシンボリックリンクを作成すべきです。

目次

パラメータ

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

戻り値

(なし)

例外

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

1,3) 基盤OS APIエラー時に std::filesystem::filesystem_error をスローします。第一パス引数として target 、第二パス引数として link 、エラーコード引数としてOSエラーコードを使用して構築されます。
2,4) 設定する std:: error_code & パラメータをOS APIエラーコードに(OS API呼び出しが失敗した場合)、そして実行する 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)
ファイル属性を決定する
シンボリックリンクのターゲットをチェックしてファイル属性を決定する
(関数)
シンボリックリンクのターゲットを取得する
(関数)
ハードリンクを作成する
(関数)