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()はintではなくqint64を返すことに注意してください。

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"

ファイルサイズが文字数とどのように一致するかを確認してください。各文字は1バイトであるため、文字数がカウントされているように見えます。

于 2011-08-31T16:06:44.987 に答える
1

また-比較

if (size1 < size2)
{
    return true;
}

あなたが思うことをするつもりはありません、それはptrアドレスを比較します。あなたはおそらく欲しい...

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

しかし、ラッキー・ルークが言ったように、これらをヒープに置く理由はありません。

于 2011-08-31T16:08:11.493 に答える