赞
踩
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(); //保存配置文件
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。