我有这段代码:
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;
我想比较文件中的字节数。但它比较了文件中符号的数量。
答案 0 :(得分:4)
根据Qt's docs:
qint64 QFile :: size()const [虚拟]
从QIODevice :: size()重新实现。
返回文件的大小。
对于Unix上的常规空文件(例如/ proc中的那些文件),此函数返回0;为响应您调用read()而生成此类文件的内容。
它确实返回字节数,而不是字符数(我假设你的意思是“符号”。注意size()返回一个qint64,而不是一个int。
如果您使用qint64,您的代码应该按预期工作。
另外,为什么使用int指针?这样做没有任何好处,只需在堆栈上创建它:
qint64 size1 = 0;
qint64 size2 = 0;
答案 1 :(得分: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"
查看文件大小与字符数的匹配程度?每个字符都是一个字节,这就是为什么它看起来像是字符。
答案 2 :(得分:1)
另外 - 比较
if (size1 < size2)
{
return true;
}
不会按照你的想法做,它会比较ptr地址。你可能想要......
if (*size1 < *size2)
{
return true;
}
但正如Lucky Luke所说,没有理由把它们放在堆上。