Qt提供了QFile类对文件操作,Qt还提了QTextStream类和QDataStream类对文件操作,对于处理临时文件可以使用QTemporaryFile,而获取文件信息则可以使用QFileInfo。
目录可以使用QDir,监视文件和目录变化使用QFileSystemWatcher。
QFile 类提供了读写文件的接口,QFile类可以读写文本文件、二进制文件和Qt资源文件,也可以用更方便的QTextStream,QDataStream 类读取文本文件和二进制文件。
打开文件用open函数,关闭文件用close函数。QFile中可以使用QIODevice中继承的readLine()函数读去一行数据。
QTextStream类提供了方便的接口来读写文本,QTextStream可以操作QIODevice、QByteArray和QString,QTextStream使用流操作符,可以方便地读写单词、行和数字。
QDataStream类提供了将二进制文件串行化的功能,QDataStream实现了基本数据类型的串行化。
QDataStream
以下代码是实际工程中截取的文件的读取和保存,采用QDataStream流的方式:
<pre name="code" class="cpp">//成品测试 打开配置文件
void MainWindow::openProfunConfigFile()
{
QString path = QFileDialog::getOpenFileName(this, tr("打开文件"), "./config", tr("Settings (*.*);;(*.prof)"));
if(!path.isEmpty()) {
QFile file(path);
if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::warning(this, tr("读取文件"), tr("无法打开文件:\n%1").arg(path));
return;
}
QDataStream in(&file);
in.setVersion(QDataStream::Qt_4_7);
//in.setByteOrder(QDataStream::LittleEndian); //编码方式:低字节在前
// 检查魔术数字
quint32 magic;
qint32 version;
in >> magic;
in >> version;
if (magic != 0x12345678) {
QMessageBox::warning(this, tr("警告"), tr("无法识别文件:\n%1").arg(path));
return;
}
//读取版本信息
if(123 != version){
QMessageBox::warning(this, tr("警告"), tr("当前版本不支持的文件:\n%1").arg(path));
return;
}
for(int i=0;i<(int)sizeof(encap_testfile_t);i++){
in >> g_tProfuncTestFile.buff[i];
}
file.close();
// QFileInfo fi = QFileInfo(file);
// setWindowTitle(fi.fileName());
//2014-12-12
//保存文件名
myApp::profunLastConfigFile = QFileInfo(file).fileName();
myApp::WriteConfig(); //保存配置文件
profunc_read_test_file_show(g_tProfuncTestFile.buff);
}
}
//成品测试 保存测试文件
void MainWindow::saveProfunConfigFile()
{
//获取文件路径
QString path = QFileDialog::getSaveFileName(this, tr("保存文件"), myApp::AppPath + "config", tr("Setting Files(*.*);;(*.prof)"));
if(!path.isEmpty()) {//判断路径是否为空
QFile file(path); //定义指定路径文件
if (!file.open(QIODevice::WriteOnly)) {//只读方式打开
QMessageBox::warning(this, tr("写入文件"), tr("无法打开文件:\n%1").arg(path));
return;
}
quint32 magic = 0x12345678;//幻数
qint32 version = 123;
QDataStream out(&file); //二进制文本流方式定义
out.setVersion(QDataStream::Qt_4_7); //设定版本
//out.setByteOrder(QDataStream::LittleEndian); //编码方式:低字节在前
out << magic; //写入幻数
out << version;
//读取数据,自定义格式
for(int i=0;i<(int)sizeof(encap_testfile_t);i++){
out << (quint8)g_tProfuncTestFile.buff[i];
}
file.close();
//2014-12-12
myApp::profunLastConfigFile = QFileInfo(file).fileName();
myApp::WriteConfig(); //保存配置文件
}
}