2017-10-20 4 views
1

バイナリファイルを別のバイナリファイルにコピーしたいとします。 私が持つ唯一の制約は、コピーはQFileを経由しなければならないということです(私はいくつかの内部メソッドをオーバーロードしていて実行する必要があるためです)。 私が解決する素朴な方法を書いたが、遅い作家である:QTで2つのバイナリファイルをコピーする最良の方法

QFile * write_to = new QFile("myfile.bin"); 
if(write_to->open(QFile::WriteOnly)) 
{ 
    QFile read_from("my_outher_bin.bin"); 
    if(read_from.open(QIODevice::ReadOnly)) 
    { 
     QDataStream write_data(write_to); 
     QDataStream read_data(&read_from); 

     while(write_to->size() < read_from.size()) 
      write_data << read_data;   
    } 
} 

これを行うための最も効果的な方法は何ですか?

std::ifstream src("file.txt", std::ios::binary); 
std::ofstream dst("to_file.txt", std::ios::binary); 
dst << src.rdbuf(); 

あなたがC++ 17を使用している場合、あなたは< filesystem>拡張および使用を使用することができます。

+1

[QFile :: copy](http://doc.qt.io/qt-5/qfile.html#copy)はなぜですか?どのような内部方法を変更しましたか? – xander

+0

ファイルの暗号化と復号化を追加するための読み取りと書き込みの方法を変更しました – YOKO

+0

ファイルのサイズは? – aghilpro

答えて

0

、それを行うSTDライブラリを使用するための簡単で安全な方法は、std::ifstreamは良いオプションですfs::copy_file機能です。

fs::copy_file("file.txt", "to_file.txt"); 
+1

彼らはいくつかの内部メソッドをオーバーロードしているため、QFileでそれを行う方法を探しています – PiedPiper

+0

何が問題ですか?この機能を使用しても、完全なファイル名またはパスにアクセスできます。 – mohabouje

関連する問題