std::filesystem:: rename
|
定義先ヘッダ
<filesystem>
|
||
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const std:: filesystem :: path & new_p ) ; |
(1) | (C++17以降) |
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const
std::
filesystem
::
path
&
new_p,
|
(2) | (C++17以降) |
old_p
で識別されるファイルシステムオブジェクトを
new_p
へ移動または名称変更します。この操作はPOSIXの
rename
関数と同等の動作を行います:
- old_p が非ディレクトリファイルの場合、 new_p は以下のいずれかでなければならない:
-
- old_p と同じファイル、またはそのハードリンクの場合:この場合、何も行われません。
- 既存の非ディレクトリファイルの場合: new_p が最初に削除され、他のプロセスが new_p が削除されたことを観測できない間に、 new_p のパス名がファイルにリンクされ、 old_p がファイルからリンク解除されます。 old_p を含むディレクトリと new_p を含むディレクトリの両方に対して書き込み権限が必要です。
- 既存ディレクトリ内に存在しないファイルの場合: new_p のパス名がファイルにリンクされ、 old_p がファイルからリンク解除されます。 old_p を含むディレクトリと new_p を含むディレクトリの両方に対して書き込み権限が必要です。
- old_p がディレクトリの場合、 new_p は以下のいずれかでなければなりません:
-
- old_p と同じディレクトリ、またはそのハードリンクの場合:このケースでは何も行われません。
- 既存のディレクトリの場合: new_p はPOSIXシステムでは空であれば削除されますが、他のシステムではエラーとなる可能性があります。エラーでない場合、 new_p が最初に削除され、他のプロセスが new_p を削除済みとして観測することを許さずに、パス名 new_p がディレクトリにリンクされ、 old_p がディレクトリからリンク解除されます。 old_p を含むディレクトリと new_p を含むディレクトリの両方に対する書き込み権限が必要です。
- 存在しないディレクトリで、ディレクトリ区切り文字で終わらず、その親ディレクトリが存在する場合:パス名 new_p がディレクトリにリンクされ、 old_p がディレクトリからリンク解除されます。 old_p を含むディレクトリと new_p を含むディレクトリの両方に対する書き込み権限が必要です。
- シンボリックリンクは追従されません: old_p がシンボリックリンクの場合、そのターゲットではなくシンボリックリンク自体がリネームされます。 new_p が既存のシンボリックリンクの場合、そのターゲットではなくシンボリックリンク自体が削除されます。
名前変更が失敗する条件:
- new_p が dot または dot-dot で終了している。
- new_p がディレクトリセパレータで終了する存在しないディレクトリを指定している。
- old_p が new_p の先祖ディレクトリである。
目次 |
パラメータ
| old_p | - | 移動または名前変更するパス |
| new_p | - | 移動/名前変更操作のターゲットパス |
| ec | - | 例外を投げないオーバーロードでのエラー報告用出力パラメータ |
戻り値
(なし)
例外
noexcept
でマークされていないオーバーロードは、
メモリ確保に失敗した場合に
std::bad_alloc
をスローする可能性があります。
例
#include <filesystem> #include <fstream> namespace fs = std::filesystem; int main() { std::filesystem::path p = std::filesystem::current_path() / "sandbox"; std::filesystem::create_directories(p / "from"); std::ofstream{ p / "from/file1.txt" }.put('a'); std::filesystem::create_directory(p / "to"); // fs::rename(p / "from/file1.txt", p / "to/"); // エラー: "to" はディレクトリ fs::rename(p / "from/file1.txt", p / "to/file2.txt"); // OK // fs::rename(p / "from", p / "to"); // エラー: "to" は空ではない fs::rename(p / "from", p / "to/subdir"); // OK std::filesystem::remove_all(p); }
関連項目
|
ファイルの名前を変更する
(function) |
|
|
(C++17)
(C++17)
|
ファイルまたは空のディレクトリを削除する
ファイルまたはディレクトリとそのすべての内容を再帰的に削除する (function) |