bool SDL_CopyFile(const char *oldpath, const char *newpath);
| const char * | oldpath | 古いパス名 |
| const char * | newpath | 新しいパス名 |
newpathのファイルが既にあれば, oldpathのファイルで上書きされる.
この関数はコピーが完了するまでブロックする. 遅いディスクで大きなファイルをコピーすると長い時間がかかる可能性がある. 一部の環境では, このコピーはOSに任せることができるが, SDLが2つのパスをオープンして一方から読み込みもう一方へと書き込む場合もある.
これはアトミックな操作ではないので注意すること.
コピー中のnewpathファイルをどこからか読み込もうとすると, コピー中の不完全なデータに見え, コピー中にスレッドを終了させる(または電源を失う)と, newpathの元の内容は失われ不完全なデータのコピーに置き換わる.
この危険性を避けるために, アプリケーションは同じディレクトリにnewpathを一時ファイルとしてコピーし, コピーに成功したら, SDL_RenamePath()で一時ファイルからnewpathに置き換える方法を勧める.
これはnewpathの読み込みでも, 完全にコピーされたデータか, コピー前かのどちらかになる.
この関数は, 呼び出しから戻る前に新しくコピーしたデータとディスクを同期させようとする. これが可能な環境ならば, ファイル名は変わったがファイルの内容がシステムのファイルキャッシュから物理ディスクに書き込まれない場合でも, システムのクラッシュや電源の喪失でもファイル名の変更の手法に問題が生じない.
様々な理由でコピーが失敗した場合, newpathの状態は不定である.
一部がコピーされた, 元のデータに変更はない, 0バイトのファイルになる, などがありうる.