Как получить количество байтов из QFile? - PullRequest
1 голос
/ 31 августа 2011

У меня есть этот код:

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;

Я хочу сравнить байты в файле. Но это сравнение количества символов в файле.

Ответы [ 3 ]

4 голосов
/ 31 августа 2011

Согласно Документам Qt :

qint64 QFile :: size () const [virtual]

Повторно реализовано из QIODevice:: size ().

Возвращает размер файла.

Для обычных пустых файлов в Unix (например, в / proc) эта функция возвращает 0;содержимое такого файла генерируется по требованию в ответ на ваш вызов read ().

Он возвращает количество байтов, а не количество символов (я полагаю, это то, что вы имеете в видуна «символы». Обратите внимание, что size () возвращает qint64, а не int.

Ваш код должен работать должным образом, если вы используете qint64.

Также, почему вы используете указатели дляint? В этом нет никакой выгоды, просто создайте его в стеке:

qint64 size1 = 0;

qint64 size2 = 0;

2 голосов
/ 31 августа 2011

Имейте в виду, что когда вы пишете символ в файл, он, вероятно, будет байтом, по большей части в любом случае.

#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"

Посмотрите, как размер файла соответствует количеству символов?Каждый символ является байтом, поэтому он выглядит так, как будто он насчитал символы.

1 голос
/ 31 августа 2011

Также - сравнение

if (size1 < size2)
{
    return true;
}

Не собирается делать то, что вы думаете, он сравнивает адреса ptr.Вы, вероятно, хотите ...

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

Но, как сказал Лаки Люк, нет причин класть их в кучу.

...