1、文件的打开
QString filePath = getPath();
QString fileName = QString("%1/%2_%3.air").arg(filePath).arg(uasName).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh-mm-ss"));
this->m_file = new QFile(fileName);
m_file->open(QIODevice::WriteOnly);
利用文件的路径+名字打开一个新文件,同名文件存在时打开,不存在时新建。
然后需要选择打开的方式(文件的读写都需要打开文件)
2、文件的写入
QByteArray arr;
{
quint8 array[8] = { 0,0,0,0,0,0,0,0 };
qToLittleEndian<double>(info.getValuelat(), array);
for (int i = 0; i < 8;i++)
{
arr.append(array[i]);
}
}
{
quint8 array[8] = { 0,0,0,0,0,0,0,0 };
qToLittleEndian<double>(info.getValuelng(), array);
for (int i = 0; i < 8; i++)
{
arr.append(array[i]);
}
}
this->m_file->write(arr);
this->m_file->flush();
把要写入的数据根据不同类型分别加入到array中,再将array写入文件。
flush()函数是使文件即时写入。
如果在打开文件的时候将写入了文件的头,在写内容时,要跳过头部长度:
if(this->m_file->open(QIODevice::WriteOnly))
{
this->m_file->write(ROFLYING_SPRAY_HISTORY_SIGNAL);
QByteArray buff;
{
quint8 array[8] = { 0,0,0,0,0,0,0,0 };
qToLittleEndian<double>(sprayWide, array);
buff.append(array[0]);
buff.append(array[1]);
buff.append(array[2]);
buff.append(array[3]);
buff.append(array[4]);
buff.append(array[5]);
buff.append(array[6]);
buff.append(array[7]);
}
{
double sprayArea = 0.0f;
quint8 array[8] = { 0,0,0,0,0,0,0,0 };
qToLittleEndian<double>(sprayArea, array);
buff.append(array[0]);
buff.append(array[1]);
buff.append(array[2]);
buff.append(array[3]);
buff.append(array[4]);
buff.append(array[5]);
buff.append(array[6]);
buff.append(array[7]);
}
quint8 uasSize1 = uasName.toLocal8Bit().size();
{
quint8 array[1] = {0};
qToLittleEndian<quint8>( uasSize1, array);
buff.append(array[0]);
}
buff.append(uasName.toLocal8Bit());
this->m_file->write(buff);
this->m_file->flush();
}
else
{
this->close();
}
if (this->isOpen())
{
this->m_file->seek(16);
QByteArray buff;
quint8 array[8] = { 0,0,0,0,0,0,0,0 };
qToLittleEndian<double>(area, array);
buff.append(array[0]);
buff.append(array[1]);
buff.append(array[2]);
buff.append(array[3]);
buff.append(array[4]);
buff.append(array[5]);
buff.append(array[6]);
buff.append(array[7]);
this->m_file->write(buff);
this->m_file->flush();
this->m_file->seek(this->m_file->size());
}
3、文件的读取
if (file.open(QIODevice::ReadOnly))
{
QByteArray data;
data = file.read(ROFLYING_AIR_HISTORY_INFO_LENGTH);
while (data.length() == ROFLYING_AIR_HISTORY_INFO_LENGTH)
{
quint8 *p = (quint8*)data.data();
RUasAirLogInfo info;
info.setValuelat(*((double *)p));
p += 8;
info.setValuelng(*((double *)p));
p += 8;
info.setValuealt_Relative(*((double *)p));
p += 8;
result->add(info);
data = file.read(ROFLYING_AIR_HISTORY_INFO_LENGTH);
}
file.close();
}