How to make QFile read the whole line
-
-
How are you determining
QFile
is stopping at thechar( 0 )
? If you're using a(const) char[]
, astd::string
orQString
any character after0
won't be displayed even if set, as0
is the string terminator. Are you sure the data is not loaded or could it be is is simply not displayed? -
file.read(checksum,32); // Actually first 32 byte are checksum and the remaining are data qDebug("Data %s",checksum); file.seek(33); size_of_file = file.size() - 33; qDebug("FILESIZE %d",size_of_file); fileData = file.read(size_of_file); qDebug("FILEDATA %s",fileData.data()); qDebug("FILEDATA1 %s",fileData.data()); FileHashData= QCryptographicHash::hash(fileData, QCryptographicHash::Md5); qDebug() << FileHashData.toHex();
-
@ManiRon said in How to make QFile read the whole line:
file.read(checksum,32); // Actually first 32 byte are checksum and the remaining are data qDebug("Data %s",checksum); file.seek(33); size_of_file = file.size() - 33;
If your checksum is 32 bytes it occupies bytes #0 to #31 inclusive (like an array). You then seek to 33. Just to verify, that means you are "skipping" 1 byte at offset 32 in the file. Is that really what you intend?
-
its a single line data i have taken sreenshot like this . After the data 61 the next starts as d2.
As per the above image the file read reads till A.,?E>t1?dWQA.,DE_??n1?d7be1526df618c0c4d1bab3959adb65ada9f20bd969493e532a7861d29bc6e698
-
-
@VRonin int cRetVal = 0;
int cRetVal = 0; QByteArray FileHashData, fileData; char checksum[32]; qint64 size_of_file; strUserName = ui->le_Username->text(); m_usrname = ui->le_Username->text(); char carrUsrPwdHash[65] = {"\0"}; QString UsrPwdHash; QFile file("userpass"); if (file.open(QIODevice::ReadOnly)) { file.read(checksum,32); qDebug() << checksum; file.seek(33); size_of_file = file.size() - 33; fileData = file.read(size_of_file); qDebug("FILEDATA %s",fileData.data()); FileHashData= QCryptographicHash::hash(fileData, QCryptographicHash::Md5); qDebug() << FileHashData.toHex(); }
-
@ManiRon
OK, in that case it sounds right if it is followed by a "Nul". Personally I would put a comment into your code then to explain that is why you are seeking to byte #33.I don't see anything which would stop at a NUL in your code. What makes you think it is doing so? Are you just relying on the output of
qDebug("FILEDATA %s",fileData.data());
and thinking that shows it has not read past a NUL, that may be an artefact of howqDebug()
displays the data? Try debugging out the length of the data? -
@JonB Actually my requirement is to calculate checksum for the data and store it in the same file where the data i am writing to . So i planned to write the checksum at the begining and followed by the data.
Now when i start the application i will validate the file by reading the checksum stored in file and compare it with the remaining data in file by calculating checksum for them .
Note the stored checksum is calculated using the data and not the whole file
-
No sir i checked the read by removing the NUL from the data in the file and i was able to see that it read the whole data and qDebug() was displaying the full data
This is the whole data when i removed the NUL : " WQA.,?E>t1?dWQA.,DE_??n1?d7be1526df618c0c4d1bab3959adb65ada9f20bd969493e532a7861d29bc6e698{TB.)?V1??n1?dS[H21?z7_??n1?d340819615bcd7cb87459cac37070456eb0af53716c1f0064c4771857728d3777 "
-
@ManiRon said in How to make QFile read the whole line:
but thsi doest read the full data
What is the output of
qDebug() << actualRead << size_of_file;
?