Qt编程11:QTextStream文件输入输出以及字符串操作的简单使用
2014-07-04 10:49
435 查看
QTextStream文本流类的功能界面和标准的C++的iostream类非常相似。
iostream和QTextStream的不同点是我们的流操作在一个很容易被继承的QIODevice上,而iostream只能操作一个不能被继承的FILE *指针。
我常常实用QTextStream按照自定义格式保存一些数据到文件中,然后根据需要将保存在的数据读取,处理。使用起来比较方便。
注意:有很多同学提到“保存的数据使用\n不能够换行”,原因之一(可能存在其他原因)在于:打开文件的的方式不对。使用“记事本”不可,尝试使用“写字板”打开文件。
iostream和QTextStream的不同点是我们的流操作在一个很容易被继承的QIODevice上,而iostream只能操作一个不能被继承的FILE *指针。
我常常实用QTextStream按照自定义格式保存一些数据到文件中,然后根据需要将保存在的数据读取,处理。使用起来比较方便。
注意:有很多同学提到“保存的数据使用\n不能够换行”,原因之一(可能存在其他原因)在于:打开文件的的方式不对。使用“记事本”不可,尝试使用“写字板”打开文件。
#include <QtCore/QCoreApplication> #include <QFile> #include <QDir> #include <QTextStream> #include <QDebug> #include <QFileInfo> #include <QTextCodec> #include <stdlib.h> #include <stdio.h> void writeInfo(const QString dirPath, QTextStream &cin); void readInfo(QTextStream &cout); static int File_Dir_Num; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QTextCodec *codec = QTextCodec::codecForLocale(); QTextCodec::setCodecForCStrings(codec); //------------------------------------------- //使用QTextStream写文件 QFile file("G:/info.txt"); if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { qDebug()<<"文件打开失败:"<<file.errorString(); return -1; } //获取一些信息将并将它保存到文件info.txt中:以获取指定文件下文件信息为例 QTextStream cin(&file); //调用文件写入函数,遍历目录将文件信息写入文件 writeInfo("F:\\Warcraft III",cin); file.close(); //------------------------------------------- //使用QTextStream读文件(对刚才的文件进行处理) QFile file2("G:/info.txt"); if(!file2.open(QIODevice::ReadOnly)) { qDebug() <<"-----------"; qDebug()<<"文件打开失败:"<<file2.errorString(); return -1; } QTextStream cout(&file2); //调用文件读取函数 readInfo(cout); file2.close(); //--------------------------------------------- //使用FILE结构体指针构造 FILE * fd = fopen("G:/info.txt","r"); if(fd == NULL) perror("文件打开失败"),exit(-1); QTextStream out(fd); qDebug()<<out.readAll(); //输出读取的全部内容 //---------------------------------------------- //对字符串进行操作 QString str; QTextStream st(&str); st<<"zhong" <<" "<<"ke"<<" "<<"yuan"<<"\n"; st<<"ruan" <<" "<<"jian"<<" "<<"yuan"<<"\n"; qDebug() << st.readAll(); //将偏移量移动到文件头位置,重新读取字符串 if(st.seek(0)) qDebug() << st.readAll(); //---------------------------------------------- return a.exec(); } //将目录信息写入文件 void writeInfo(const QString dirPath,QTextStream &cin) { QDir dir(dirPath); foreach(QFileInfo fileInfor,dir.entryInfoList()) { //排除自己和上一级目录 if(fileInfor.fileName().startsWith(".")) { continue; } //如果是文件 if(fileInfor.isFile()) { cin << ++File_Dir_Num <<"|"<< fileInfor.fileName()<<"|"<<"F"<<"|"<<fileInfor.size()<<"\n"; } //如果是目录 else if(fileInfor.isDir()) { cin << ++File_Dir_Num <<"|"<< fileInfor.fileName()<<"|"<<"D"<<"|"<<fileInfor.size()<<"\n"; writeInfo(fileInfor.filePath(),cin); } } } //读文件中的内容 void readInfo(QTextStream &cout) { while(!cout.atEnd()) { QStringList strList = cout.readLine().split("|"); qDebug() << QString("文件序号:%1 ").arg(strList.at(0)) << QString("文件名:%1 ").arg(strList.at(1)) <<QString("文件类型:%1 ").arg(strList.at(2) == "F"?"普通文件":"文件夹")<<QString("文件大小:%1").arg(strList.at(3)); } }
相关文章推荐
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
- Java操作文件输出为字符串以及字符串输出为文件
- 在Java中使用标准输入输出设备进行字符串,整数浮点数等 的输入输出操作
- python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
- Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误
- 简单使用dom4j对xml文件进行输出操作(如何使用dom4j对xml文件进行输出)
- Python3 输入和输出以及文件操作
- C/C++:递归使用:使用递归反向写文件(例子)以及字符串翻转输出
- 将输入文件读入字符串以及将字符串写入输出文件
- Java操作文件输出为字符串以及字符串输出为文件的方法
- python基础(文件输入/输出 内建类型 字典操作使用方法)
- C语言 使用文件输入/输出数据
- 使用移位操作把十进制转换为二进制与十六进制字符串输出
- Python利用系统命令获取文件(夹)信息以及Python对Excel的简单操作
- 文件输入和输出简单示例
- C语言:从键盘输入一个字符串,以感叹号!作为结束标志,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。
- 使用SAS存储过程直接输出excel文件最简单的方法
- labview下关于文件输入输出io口的操作
- Java里面最简单好用的文件输入输出方法