目次 - SDL 3.0 API(機能別) - ファイルシステム - SDL_CopyFile

SDL_CopyFile

ファイルをコピーする

ヘッダ

SDL3/SDL_filesystem.h

構文

bool SDL_CopyFile(const char *oldpath, const char *newpath);

引数

const char *oldpath古いパス名
const char *newpath新しいパス名

戻り値

(bool) 成功のとき真, 失敗のとき偽を戻す. SDL_GetError()を呼んで詳細を知ることができる.

詳細

newpathのファイルが既にあれば, oldpathのファイルで上書きされる.

この関数はコピーが完了するまでブロックする. 遅いディスクで大きなファイルをコピーすると長い時間がかかる可能性がある. 一部の環境では, このコピーはOSに任せることができるが, SDLが2つのパスをオープンして一方から読み込みもう一方へと書き込む場合もある.

これはアトミックな操作ではないので注意すること. コピー中のnewpathファイルをどこからか読み込もうとすると, コピー中の不完全なデータに見え, コピー中にスレッドを終了させる(または電源を失う)と, newpathの元の内容は失われ不完全なデータのコピーに置き換わる. この危険性を避けるために, アプリケーションは同じディレクトリにnewpathを一時ファイルとしてコピーし, コピーに成功したら, SDL_RenamePath()で一時ファイルからnewpathに置き換える方法を勧める. これはnewpathの読み込みでも, 完全にコピーされたデータか, コピー前かのどちらかになる.

この関数は, 呼び出しから戻る前に新しくコピーしたデータとディスクを同期させようとする. これが可能な環境ならば, ファイル名は変わったがファイルの内容がシステムのファイルキャッシュから物理ディスクに書き込まれない場合でも, システムのクラッシュや電源の喪失でもファイル名の変更の手法に問題が生じない.

様々な理由でコピーが失敗した場合, newpathの状態は不定である. 一部がコピーされた, 元のデータに変更はない, 0バイトのファイルになる, などがありうる.

スレッドセーフ

この関数はどのスレッドからも安全に呼べるが, 操作はアトミックではなく, アプリケーションはファイルの他のスレッドからのアクセスを適切な方法で保護する必要がある場合がある.

バージョン

SDL 3.2.0以降

SDL Wikiへのリンク

SDL_CopyFile - SDL Wiki