您的位置:首页 > 编程语言 > Qt开发

Qt编程11:QTextStream文件输入输出以及字符串操作的简单使用

2014-07-04 10:49 435 查看
QTextStream文本流类的功能界面和标准的C++的iostream类非常相似。

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));
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐