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; 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?
-
@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(); }
-
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
-
@ManiRon
in that image b5afa24a9fa264a178f5ae63c7eff6cf this is my checksum after that a Nul character is there after which my actual data starts@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? -
@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
-
could you replace
fileData = file.read(size_of_file);
with :fileData.resize(size_of_file); const auto actualRead = file.read(fileData.data(),size_of_file); Q_ASSERT(actualRead==size_of_file);
-
@VRonin said in How to make QFile read the whole line:
actualRead
I tried sir but i am getting this kind of error
-
@ManiRon It's not hard to fix:
const qint64 actualRead = file.read(fileData.data(),size_of_file);
-
could you replace
fileData = file.read(size_of_file);
with :fileData.resize(size_of_file); const auto actualRead = file.read(fileData.data(),size_of_file); Q_ASSERT(actualRead==size_of_file);
-
@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?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 "
-
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;
?
-
@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;
?
-
@jsulm said in How to make QFile read the whole line:
size_of_file
Size = 194 .
I thought it was qdebug problem so i wrote the data read from the file to another file then also it remains the same as the data shown in the debug