原文地址:http://blog.sina.com.cn/s/blog_5cefd9ca0102v153.html
在qt中把各项功能封装的非常好,并且极为便于使用。QDir类提供了对目录结构和他们的内容的访问,是平台无关的。其实对一个类的理解重点还是在于这个类的要实现的功能目的,然后根据常识的理解来看看它所提供的几个重要的接口,就算是对这个类的理解了。 然后自己的需要功能需求来调用接口实现相应功能,所以如果是自己学习的话就要抓住核心概念,核心功能来实验和理解。如果是工作的话就是先实现功能然后再来抽象系统化。
直接上代码这里是
QDir dir(m_frameFilepath);
dir.setFilter(QDir::Files|QDir::Hidden|QDir::NoSymLinks);
dir.setSorting(QDir::Size|QDir::Reversed); //这两个函数设置进入list的顺序和文件属性,这种设置下就应该是文件隐藏文件 不列出连接符
根据大小的反排序
QStringList filters;
filters << "*.xml";
dir.setNameFilters(filters); //这个就是设置过滤的文件名使用通配符
QFileInfoList list=dir.entryInfoList();
QString str;
for(int i=0;i
{
QFileInfo fileInfo = list.at(i);
// str = qPrintable(QString("%1 %2").arg(fileInfo.size(), 10)
// .arg(fileInfo.fileName()));
str = fileInfo.fileName();
// qDebug() << str;
ui->comboBoxChoose->insertItem(i,str);
}
这其中的QFileInfoList 有点意思 它其实就是QFileInfo的 QList容器类型 typedef QList QFileInfoList; 这样的QStringList 应该也是如此的了(这个以为是一样的其实去看源码发现是进行的继承,还增加了一些简单的功能,构造函数更强大了) 所以对此种类型的后续操作就是对QList的操作咯,这个好。QFileInfo是提供具体的文件信息的操作的类 提供大小 文件名字 是否可读 是否存在啊这些 路径查询这些
再上两段代码读,存文件
QString getCurUseFile(QString &str)
{
QFile file(str);
file.open(QFile::ReadOnly);
QByteArray bytearr;
bytearr = file.readLine();
QString strread(bytearr);
return strread;
}
void setCurUseFile(QString &filepath, QString name)
{
QFile fileW(filepath);
if(!fileW.open(QFile::WriteOnly))
{
QMessageBox box;
QString str(tr("打开写配置文件出错"));
box.setText(str);
return;
}
QTextStream in(&fileW);
in << name;
}
感觉QFile这个操作文件输入输出设备的类应该是个大类 但具体看时倒也不大,就是常规的打开关闭定位等。QFile是从QIODevice继承而来的。在读写字符串时是与QTextStream类相结合是相当的方便。在读写二进制时用QDataStream更方便。当然是用QFile本身提供的操作也可以完成读取行某个位置的字节这些动作,其返回是一个QByteArray数组。 QByteArray与QString是有些类似的,只不过QString可支持更多 像款字符编码这些,他们之间的转换也是相当方便的,就像是char数组样,是不以\0结尾的。
这样基础的文件夹 访问 文件读写 其周边的类就都有一个了解了。
总结一下:
QDir类管理目录和文件名列表。
QFile是直接负责具体文件的打开读写的。
QFileInfo类控制文件的详细信息,比如访问权限、文件日期和文件类型。
对文件的操作当然可以用QFile本身的操作,但更为方便的是QDataStream、QTextStream,还有更好的办法么。