名前空間
変種
操作

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

From cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
ヘッダー <experimental/filesystem> で定義されています
void create_symlink( const path& target, const path& link );
void create_symlink( const path& target, const path& link, error_code& ec );
(1) (filesystem TS)
void create_directory_symlink( const path& target, const path& link );
void create_directory_symlink( const path& target, const path& link, error_code& ec );
(2) (filesystem TS)

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

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

目次

[編集] パラメータ

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

[編集] 戻り値

(なし)

[編集] 例外

error_code& パラメータを取らないオーバーロードは、基盤となる OS API エラーが発生した場合に filesystem_error をスローします。これは、最初の引数に target、2 番目の引数に link、エラーコード引数に OS のエラーコードを指定して構築されます。メモリ割り当てが失敗した場合、std::bad_alloc がスローされる可能性があります。error_code& パラメータを取るオーバーロードは、OS API の呼び出しが失敗した場合にそれを OS API のエラーコードに設定し、エラーが発生しなかった場合は ec.clear() を実行します。このオーバーロードは
noexcept 指定:  
noexcept
  

[編集] 注意

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

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

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

[編集]

#include <experimental/filesystem>
#include <iostream>
namespace fs = std::experimental::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';
 
    fs::remove_all("sandbox");
}

実行結果の例

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

[編集] 関連項目

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