9

C++ でファイルをフォルダー (ドライブ C など) から別のフォルダー (ドライブ D など) に移動したいと考えています。ファイルが宛先フォルダーに既に存在する場合は、それを上書きする必要があります。C++ std ライブラリまたは Qt でどのように達成できますか?

「名前の変更」方法を見つけましたが、パスが異なるドライブにある場合に機能するかどうかはわかりません。さらに、プラットフォームの依存関係は何ですか?

4

1 に答える 1

5

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

このようにすることで、新しい場所にあるファイルが一度にファイル全体として表示され、最悪の障害モードには、ファイルを移動する代わりにコピーすることが含まれます。

于 2013-08-26T10:22:14.653 に答える