【问题标题】:How to get number of bytes from QFile?如何从 QFile 获取字节数?
【发布时间】:2011-08-31 15:38:46
【问题描述】:

我有这个代码:

int *size1 = new int();
int *size2 = new int();
QFile* file = new QFile("C:/Temp/tf.txt");
file->open(QFile::WriteOnly | QFile::Truncate);
file->write(str);
    *size1 = file->size();
file->close();
file->open(QFile::WriteOnly | QFile::Truncate);
file->write(strC);
    *size2 = file->size();
file->close();
delete file;
if (size1 < size2)
{
    return true;
}
else
{
    return false;
}
delete size1;
delete size2;

我想比较文件中的字节。但它比较文件中的符号数量。

【问题讨论】:

    标签: c++ qt qfile


    【解决方案1】:

    根据Qt's docs

    qint64 QFile::size () const [虚拟]

    从 QIODevice::size() 重新实现。

    返回文件的大小。

    对于 Unix 上的常规空文件(例如 /proc 中的那些),此函数返回 0;此类文件的内容是响应您调用 read() 按需生成的。

    它确实返回字节数,而不是字符数(我假设这就是您所说的“符号”的意思。请注意,size() 返回的是 qint64,而不是 int。

    如果您使用 qint64,您的代码应该可以正常工作。

    另外,你为什么使用 int 指针?这样做没有任何好处,只需在堆栈上创建即可:

    qint64 size1 = 0;

    qint64 size2 = 0;

    【讨论】:

      【解决方案2】:

      请记住,当您将字符写入文件时,它可能会是一个字节,无论如何大部分都是。

      #include <QtCore/QCoreApplication>
      #include <QFile>
      #include <QDebug>
      
      int main(int argc, char *argv[])
      {
          QCoreApplication a(argc, argv);
          char *str = "Hello";
      
          char *strC = "Hello again!";
          qint64 size1;
          qint64 size2;
          QFile* file = new QFile("/home/nick/tf.txt");
          file->open(QFile::WriteOnly | QFile::Truncate);
          file->write(str);
      
          size1 = file->size();
      
          file->close();
          file->open(QFile::WriteOnly | QFile::Truncate);
          file->write(strC);
      
          size2 = file->size();
      
          file->close();
          delete file;
      
          QString num1 = QString::number(size1);
          QString num2 = QString::number(size2);
          if (size1 < size2)
          {
              qDebug() << "Returning true";
              qDebug() << "Size 1 is: " + num1;
              qDebug() << "Size 2 is: " + num2;
              return true;
          }
          else
          {
              return false;
          }
      
          return a.exec();
      }
      

      稍微修改了您的代码。这会产生:

      Returning true 
      "Size 1 is: 5" 
      "Size 2 is: 12"
      

      查看文件大小如何匹配字符数?每个字符都是一个字节,这就是为什么它看起来像是对字符进行计数的原因。

      【讨论】:

        【解决方案3】:

        还有——比较

        if (size1 < size2)
        {
            return true;
        }
        

        不会按照你的想法去做,它会比较 ptr 地址。你可能想要...

        if (*size1 < *size2)
        {
            return true;
        }
        

        但正如幸运卢克所说,没有理由将这些放在堆上。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-31
          • 2011-04-08
          • 1970-01-01
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多