[英]Qt - Reading file containing multiple NULL characters
我得到了一個文件,該文件在一行中包含多個NULL特征/0
。 我的目標是加載文件並將/0
替換為其他文件,但這樣做時遇到了一些問題。
在到達NULL字符的位置后,Qt停止讀取文件。
碼:
QTextStream fileContent;
QFile file(pendingFile);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
fileContent.append(file.readAll());
}
文件:
Text
Text
Text /x00/x00/x00/x00/x00/x00/x00
More Text
我目前正在使用Qt 5.9.1並使用VS2017進行開發。
使用QDataStream讀取文件
QFile file("raw.dat");
file.open(QIODevice::ReadOnly);
QDataStream fileStream(&file);
qint64 fileSize = file.size();
QByteArray data(fileSize, '\0');
fileStream.readRawData(data.data(), fileSize)
在ByteArray中,您可以替換所有\\ 0元素。
更新(評論,請看underscore_d的答案):
data.replace('\0','_');
QString dataString(data);
問題不在於QFile
在NUL
處停止讀取(即'\\0'
,而不是NULL
宏),而是QTextStream
認為NUL
表示字符串結尾,因此在遇到第一個NUL
之后停止了append()
。
這是另一個站點上的上一個主題,討論的內容非常相似,並帶有建議的替代方法,其歸結為:
您需要先將NUL
替換為QTextStream
,然后再將它們通過。 建議使用QDataStream
。 也許您根本不需要TextStream
或任何Stream
,並且可以將文件作為二進制文件讀取到內存中,並在再次寫入之前用您選擇的替代項替換NUL
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.