std::filesystem::rename
提供: cppreference.com
< cpp | filesystem
ヘッダ <filesystem> で定義
|
||
void rename(const std::filesystem::path& old_p, const std::filesystem::path& new_p); |
(C++17以上) | |
POSIX の rename によって行われたかのように、 old_p
によって表されるファイルシステムオブジェクトを new_p
に移動または名前変更します。
-
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
と同じディレクトリか、同じディレクトリを指すハードリンク。 この場合は何も行われません。 - 存在するディレクトリ。 POSIX システムでは、空であれば、
new_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
が存在するシンボリックリンクの場合、そのターゲットではなく、リンク自身が削除されます。
以下の場合、名前変更は失敗します。
-
new_p
がドットまたはドット-ドットで終わる。 -
new_p
がディレクトリ区切り文字で終わる存在しないディレクトリを表す。 -
old_p
がnew_p
の祖先ディレクトリである。
目次 |
[編集] 引数
old_p | - | 移動または名前変更するパス |
new_p | - | 移動または名前変更操作のターゲットパス |
ec | - | 例外を投げないオーバーロードでエラーを報告するための出力引数 |
[編集] 戻り値
(なし)
[編集] 例外
std::error_code& 引数を取らないオーバーロードは、ベースとなる OS の API でエラーが発生した場合、第1パス引数に old_p
、第2パス引数に new_p
、エラーコード引数に OS のエラーコードを指定して構築された filesystem_error を投げます。 std::error_code& 引数を取るオーバーロードは、 OS の API 呼び出しが失敗した場合、その引数を OS の API のエラーコードに設定し、エラーが発生しない場合は ec.clear() を実行します。 noexcept
指定のないあら��るオーバーロードは、メモリ確保に失敗した場合 std::bad_alloc を投げる可能性があります。
[編集] 例
Run this code
#include <iostream> #include <fstream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::path p = fs::current_path() / "sandbox"; fs::create_directories(p/"from"); std::ofstream(p/"from/file1.txt").put('a'); fs::create_directory(p/"to"); // fs::rename(p/"from/file1.txt", p/"to/"); // error: to is a directory fs::rename(p/"from/file1.txt", p/"to/file2.txt"); // OK // fs::rename(p/"from", p/"to"); // error: to is not empty fs::rename(p/"from", p/"to/subdir"); // OK fs::remove_all(p); }
[編集] 関連項目
ファイルの名前を変更します (関数) | |
(C++17)(C++17) |
ファイルまたは空のディレクトリを削除します ファイルまたはディレクトリおよびそのすべての内容を再帰的に削除します (関数) |