2011-08-31 22 views
1

我有這樣的代碼:如何獲取QFile的字節數?

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; 

我想在文件比較字節。但它比較文件中的符號數量。

回答

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

根據Qt's docs

qint64一個QFile ::尺寸()const的[虛]

從QIODevice中重新實現::尺寸()。

返回文件的大小。

對於Unix上的常規空文件(例如/ proc中的那些文件),該函數返回0;這個文件的內容是根據需要生成的,以響應你調用read()。

它不會返回字節

數量,而不是字符數(我假定這就是你的「符號」的意思。需要注意的是尺寸()返回一個qint64,而不是一個int。 ?

qint64尺寸1 =:您的代碼應工作,如果你使用qint64預期

而且,你爲什麼要使用INT指針中有這樣做沒有任何好處,只是在棧上創建0;

qint64 size2 = 0;

1

而且 - 比較

if (size1 < size2) 
{ 
    return true; 
} 

是不會做你認爲,它比較PTR地址。你可能想...

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

但正如幸運盧克說,沒有任何理由把這些放在堆上。