C++ でファイルをフォルダー (ドライブ C など) から別のフォルダー (ドライブ D など) に移動したいと考えています。ファイルが宛先フォルダーに既に存在する場合は、それを上書きする必要があります。C++ std ライブラリまたは Qt でどのように達成できますか?
「名前の変更」方法を見つけましたが、パスが異なるドライブにある場合に機能するかどうかはわかりません。さらに、プラットフォームの依存関係は何ですか?
QFile::rename()を使用するだけです。ほとんどの目的で、ほぼ正しいことを行う必要があります。C++ 標準ライブラリにはファイルシステム間の名前変更呼び出しがないと思います (間違っている場合はコメントで訂正してください!)、std::renameは単一のファイルシステム内でのみ移動できます。
ただし、通常、ここでの (関連する) アトミック ファイル操作は、同じファイル システム内での名前変更のみであり、ファイルの内容は変更されず、ディレクトリ情報のみが変更されます。これをサポートする C++ ライブラリを認識していないため、大まかな擬似コードを次に示します。
if basic rename succeeds
you're done
else if not moving between file systems (or just folders for simplicity)
rename failed
else
try
create temporary file name on target file system using a proper system call
copy contents of the file to the temporary file
rename temporary file to new name, possibly overwriting old file
remove original file
catch error
remove temporary file if it exists
rename failed
このようにすることで、新しい場所にあるファイルが一度にファイル全体として表示され、最悪の障害モードには、ファイルを移動する代わりにコピーすることが含まれます。