【问题标题】:What's the best way to copy two binary files in QT在QT中复制两个二进制文件的最佳方法是什么
【发布时间】:2018-04-01 12:54:55
【问题描述】:

我想将一个二进制文件复制到另一个二进制文件。 我唯一的限制是必须通过QFile 进行复制(因为我已经重载了一些内部方法并且我需要它们运行)。 我写了一个幼稚的方法来解决但写的很慢:

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;         
   }
}

最有效的方法是什么?

【问题讨论】:

  • 为什么不QFile::copy ?你改变了哪些内部方法?
  • 我改变了读写方式,对文件添加加密和解密
  • 文件大小是多少?
  • 800mb 到 5gb(它可以先读到内存中(我在 64 位窗口上),但我认为这不是最有效的方式)
  • 查看QFile::copycode 似乎仍然使用readwrite 方法,如果这不起作用,请复制代码并执行类似的操作(他们使用4k 字节缓冲区并以块的形式复制数据)。

标签: qt binary file-copying


【解决方案1】:

一种简单安全的方法,使用 STD 库,std::ifstream 是一个不错的选择:

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

如果您使用的是 C++17,则可以使用 filesystem> 扩展名并使用 fs::copy_file 函数。

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

【讨论】:

  • 他们正在寻找一种使用 QFile 的方法,因为他们重载了一些内部方法
  • 有什么问题?您仍然可以使用此功能,您可以访问完整的文件名或路径。
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
相关资源
最近更新 更多