QT学习之文件系统读写类
QT学习之文件系统读写类
QIODevice
QFileDeviceQBufferQProcess和QProcessEnvironment
QFileDevice
QFileQFileInfo
QT5 Input/Output 类图

QFile
QFile 类用来对文件的操作:
| 头文件 | #include <QFile> |
|---|---|
| 模块 | QT += core |
| 基类 | QFileDevice. |
| 子类 | QTemporaryFile |
使用QFile可以打开关闭文件,并对文件进行处理。其主要使用方法有:
- 文件的读写
QString text;
QFile read(oldPath);
if(!read.exists())return;
if(read.open(QIODevice::ReadOnly)){
text=read.readAll();
}
read.close();
QFile write(newPath);
if(write.open(QIODevice::WriteOnly)){
write.write(text,qstrlen(text));
}
write.close();
- 文件的读写--使用流
QString text;
QFile read(oldPath);
if(!read.exists())return;
if(read.open(QIODevice::ReadOnly)){
QTextStream in(&read); //使用流进行读写
in.setCodec("UTF-8"); //设置读时编码
text=in.readAll(); //使用流读取全部文件
}
read.close();
QFile write(newPath);
if(write.open(QIODevice::WriteOnly)){
QTextStream out(&write);
out.setCodec("UTF-8");
out<<text;
}
write.close();
- 复制文件
QFile::copy(oldFilePath,newFilePath);
//其中oldFilePath文件必须存在,newFilePath的路径中不能包含不存在的路径!
- 删除文件
bool QFile::remove()
bool QFile::remove(const QString & fileName) [static]
- 给文件重命名
bool QFile::rename(const QString & newName)
bool QFile::rename(const QString & oldName, const QString & newName) [static]
- 为新文件创建路径
QDir dir;
dir.mkpath(dirpath);
//创建新目录,dirpath中的所有未创建的子文件夹都将被创建
dir.setPath(dirCur);//设置当前路径
dir.mkdir(dirName);
//创建子目录,在当前目录下创建一个子文件夹dirName
QFileInfo类处理文件的信息,构造函数:
QFileInfo()
QFileInfo(const QString & file)
QFileInfo(const QFile & file)
QFileInfo(const QDir & dir, const QString & file)
QFileInfo(const QFileInfo & fileinfo)
常用方法,假设文件为:"E:/dirPath/fileName.sfx"
- 获取文件名,包含后缀
QString fileName() const // 返回值为: "fileName.sfx"
- 获取文件路径,到文件所在当前目录,不包含最后的 "/"
QString filePath() const // 返回值为: "E:/dirPath"
QDir dir() const
- 获取文件后缀,不包括 "."
QString suffix() const // 返回值为: "sfx"
- 判断文件是否存在,一般处理文件之前,都应先调用此方法
bool exists() const
- 返回文件的绝对路径
QString QFileInfo::absoluteFilePath() const // 返回包括文件名的绝对路径。
QString QFileInfo::absolutePath() const // 返回不包括文件名的绝对路径。
QDir QFileInfo::absoluteDir() const
- 返回文件的基名称
QString QFileInfo::baseName() const
eg:
QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.baseName(); // base = "archive"
QDir 类处理有关文件目录路径问题,构造函数
QDir(const QDir & dir)
QDir(const QString & path = QString())
QDir(const QString & path, const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ), Filters filters = AllEntries)
- 获取目录内指定后缀的文件,获取的文件的路径(绝对路径)
QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
eg:
QStringList fileList;
fileList<<"*.xml"<<"*.txt"; //只显示xml文档和txt文档
QDir dir;
dir.setPath(dirPath);
if(!dir.exists())return;
//设置目录下显示的内容,这里只显示文件,不显示文件夹
dir.setFilter(QDir::Files);
//设置目录下文件的排序方式,这里为按名称排序
dir.setSorting(QDir::Name);
//设置过滤字段
dir.setNameFilters(fileList);
//获取目录下对应文件
QFileInfoList list = dir.entryInfoList();
QSaveFile
QSaveFile类是为了安全的进行写操作而设计的,用来写入文本和二进制数据到文件中,当写入操作失败时,不会丢失要写入的数据。
当要写入数据时,会先建立一个临时的文件保存要写入的数据。如果在写入过程中没有错误发生,则使用commit() 提交到最终要写入的文件中去。这种机制确保了一旦发生写入错误,写入的文件中不会没有数据。并且没有部分写入的文件总是出现在最后的位置。当向磁盘写入文档时经常使用此类。
QSaveFile会在写入过程中自动的检查错误。可以像QFile类那样来进行操作文件,使用 open() 打开文件,也可以使用继承自QIODevice 类的方法操作。但不能使用close(),而是使用commit()!由于应用程序出错导致的呼叫 cancelWriting(),即使调用 commit() 也不会进行保存。
其自身Public 方法:
QSaveFile(const QString & name)
QSaveFile(QObject * parent = 0)
QSaveFile(const QString & name, QObject * parent)
~QSaveFile()
void cancelWriting()
bool commit()
bool directWriteFallback() const
void setDirectWriteFallback(bool enabled)
void setFileName(const QString & name)
QTemporaryDir
QTemporaryDir用于安全的建立一个临时的目录,目录名由类构造函数自动生成。使用 QString path() const 获取路径。
其自身公用方法有:
QTemporaryDir()
QTemporaryDir(const QString & templatePath)
~QTemporaryDir()
bool autoRemove() const
bool isValid() const
QString path() const
bool remove()
void setAutoRemove(bool b)
QT给出的列子:
// Within a function/method...
QTemporaryDir dir;
if (dir.isValid()) {
// dir.path() returns the unique directory path
}
// The QTemporaryDir destructor removes the temporary directory
// as it goes out of scope.
QTemporaryFile
QTemporaryFile用于安全的创建一个临时文件。调用open()时自动创建。自身公共方法有:
QTemporaryFile()
QTemporaryFile(const QString & templateName)
QTemporaryFile(QObject * parent)
QTemporaryFile(const QString & templateName, QObject * parent)
~QTemporaryFile()
bool autoRemove() const
QString fileTemplate() const
bool open()
void setAutoRemove(bool b)
void setFileTemplate(const QString & name)
QT给出的使用列子:
// Within a function/method...
QTemporaryFile file;
if (file.open()) {
// file.fileName() returns the unique file name
}
// The QTemporaryFile destructor removes the temporary file
// as it goes out of scope.
QDirIterator
QDirIterator用于遍历目录,无基类!
| Constant | Value | Description |
|---|---|---|
| QDirIterator::NoIteratorFlags | 0x0 | 默认情况,迭代器将返回指定目录的条目 |
| QDirIterator::Subdirectories | 0x2 | 列出指定目录的所有子条目(包括子目录下的目录) |
| QDirIterator::FollowSymlinks | 0x1 | 在Subdirectories条件下忽略符号链接 "." 或者 ".." |
其自身公有方法:
QDirIterator(const QDir & dir, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, QDir::Filters filters, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, const QStringList & nameFilters, QDir::Filters filters = QDir::NoFilter, IteratorFlags flags = NoIteratorFlags)
~QDirIterator()
QFileInfo fileInfo() const
QString fileName() const
QString filePath() const
bool hasNext() const
QString next()
QString path() const
QT给出的例子:
QDirIterator it("/etc", QDirIterator::Subdirectories);
while (it.hasNext()) {
qDebug() << it.next();
// /etc/.
// /etc/..
// /etc/X11
// /etc/X11/fs
// ...
}
QStandardPaths
QStandardPaths用于处理系统标准路径。
QString displayName(StandardLocation type)
QString findExecutable(const QString & executableName, const QStringList & paths = QStringList())
QString locate(StandardLocation type, const QString & fileName, LocateOptions options = LocateFile)
QStringList locateAll(StandardLocation type, const QString & fileName, LocateOptions options = LocateFile)
void setTestModeEnabled(bool testMode)
QStringList standardLocations(StandardLocation type)
QString writableLocation(StandardLocation type)
enum LocateOption { LocateFile, LocateDirectory }
flags LocateOptions
enum StandardLocation { DesktopLocation, DocumentsLocation, FontsLocation, ApplicationsLocation, ..., GenericConfigLocation }
QT Dialogs类图

这里只简单说一下QFileDialog类:
| 头文件 | #include <QFileDialog> |
|---|---|
| 模块 | QT += widgets |
| 基类 | QDialog |
常用静态成员函数:
- 打开一个获取目录的对话框
QString getExistingDirectory( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly)
QUrl getExistingDirectoryUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), Options options = ShowDirsOnly, const QStringList & supportedSchemes = QStringList())
- 打开一个选择文件的对话框
QString getOpenFileName( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QStringList getOpenFileNames(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QUrl getOpenFileUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
QList<QUrl> getOpenFileUrls( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
- 打开另存为对话框,返回另存为文件的全路径地址
QString getSaveFileName( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QUrl getSaveFileUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
其中 QString & filter = QString() 代表文件过滤器,写法如下:
QStringList ls=
QFileDialog::getOpenFileNames(this
,tr("选用文件")
,QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0)
,tr("XML文件 (*.xml);;文本文件(*.txt"));
QT学习之文件系统读写类的更多相关文章
- Qt 学习 之 二进制文件读写
在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice提供了read().readLine()等基本的操作.同时,Qt 还提供了更高一级的操作:用于二进制的 ...
- QT学习 之 文本文件读写
上一章我们介绍了有关二进制文件的读写.二进制文件比较小巧,却不是人可读的格式.而文本文件是一种人可读的文件.为了操作这种文件,我们需要使用QTextStream类.QTextStream和QDataS ...
- Qt 学习之路 2(37):文本文件读写
Qt 学习之路 2(37):文本文件读写 豆子 2013年1月7日 Qt 学习之路 2 23条评论 上一章我们介绍了有关二进制文件的读写.二进制文件比较小巧,却不是人可读的格式.而文本文件是一种人可读 ...
- Qt 学习之路 2(36):二进制文件读写
Qt 学习之路 2(36):二进制文件读写 豆子 2013年1月6日 Qt 学习之路 2 20条评论 在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- Qt 学习之路 2(73):Qt 线程相关类
Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类 豆子 2013年11月26日 Qt 学习之路 2 7条评论 希 ...
- (转)Qt Model/View 学习笔记 (三)——Model类
Model类 基本概念 在model/view构架中,model为view和delegates使用数据提供了标准接口.在Qt中,标准接口QAbstractItemModel类中被定义.不管数据在底层以 ...
- Qt 学习之路 2(35):文件
Qt 学习之路 2(35):文件 豆子 2013年1月5日 Qt 学习之路 2 12条评论 文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了 ...
随机推荐
- 解决nginx文件服务器访问403
2018-10-24 nginx配置文件目录服务器 修改/etc/nginx/conf.d/default.conf或者在/etc/nginx/conf.d/目录下添加一配置文件,如下 server ...
- 剑指offer——面试题15:二进制中 1的个数
// 面试题15:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如 // 把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. #inc ...
- PIE SDK Command、Tool、Control的调用和拓展
1.功能简介 在一个项目中,是通过小组成员共同开发的,难以避免的是当项目功能集成的时候会出现很多兼容性问题,开发讲究高内聚低耦合,利用Command.Tool和Control的使用,可以提升集成的效率 ...
- spark第二篇:Application Submission Guide
提交应用 Spark的bin目录中的spark-submit脚本用于启动集群上的应用程序.它可以通过一个统一的接口使用所有Spark支持的集群管理器. 绑定应用程序的依赖 如果你的代码依赖其他项目,你 ...
- ansible 实战项目之文件操作(二)
一,前言 如果没有安装好的话看我以前的贴子哦!! 上次安装已经确定通了,所以下面步骤应该是完全ok的 特点: (1).轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可: (2 ...
- C++ Memory System Part3 : 优化
前面的系列我们讲了自定义new和delete操作,其中针对deleteArray的问题还有需要优化的地方.我们这次就针对POD类型进行一次优化. 下面的代码是针对POD类型的模板函数实现,分别为New ...
- 【数据结构】最小生成树之prim算法和kruskal算法
在日常生活中解决问题经常需要考虑最优的问题,而最小生成树就是其中的一种.看了很多博客,先总结如下,只需要您20分钟的时间,就能完全理解. 比如:有四个村庄要修四条路,让村子能两两联系起来,这时就有最优 ...
- 使用SeaJS实现模块化JavaScript开发【转】
前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等JavaScript框架不同,SeaJS不会扩展封 ...
- 九度oj题目1385:重建二叉树
题目1385:重建二叉树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4419 解决:1311 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和 ...
- linux下Oracle 相关命令
#注意:例子中的oralce命令在/home/oracle/oracle/product/10.2.0/db_1/bin目录.#你可以自己修改成自己的目录. A.#dbstart //启动数据库 #d ...