2

我有这个代码:

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;

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

4

3 回答 3

4

根据Qt 的文档

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

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

返回文件的大小。

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

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

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

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

qint64 size1 = 0;

qint64 size2 = 0;

于 2011-08-31T15:47:30.967 回答
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"

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

于 2011-08-31T16:06:44.987 回答
1

还有——比较

if (size1 < size2)
{
    return true;
}

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

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

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

于 2011-08-31T16:08:11.493 回答