6. QTemporaryDir和QTemporaryFile类
1. 说明
本文内容翻译自Qt帮助文档,其中加了一些博主自己的理解,Qt版本为Qt 5.9.7。
2. QCoreApplication类
QCoreApplication是为无GUI应用提供时间循环的类,是所有应用程序类的基类。对于GUI应用程序,对应的类为QGuiApplication,此类继承自QCoreApplication,它有一重要的子类--QApplication,QApplication为基于QWidget的应用程序提供支持。表2列举了几个QCoreApplication常用的静态成员函数:
函数原型 | 功能 |
[static] QString applicationDirPath() | 返回应用程序启动路径, 路径后无“/”结尾 |
[static] QString applicationFilePath() | 返回应用程序的完整文件名(绝对路径) |
[static] QString applicationName() | 返回应用程序名称,不带路径和后缀 |
[static] int exec() | 进入主事件循环并等待直到调用exit()。返回传递给exit()的值(如果通过quit()调用exit(),则返回0)。 |
[static] void exit(int returnCode = 0) | 退出应用程序,main函数返回值为returnCode。 |
[static slot] void quit() | 继承自QObject,功能相当于调用exit(0) |
3. QDir类
QDir类是Qt用于目录操作的类,其常用成员函数如表3。
函数原型 | 功能 |
[static] QString rootPath() | 返回系统根目录名称。Linux系统通常返回”/”,Windows系统通常返回”C:/”。 |
[static] QString tempPath() | 返回系统临时文件目录名称。如Windows系统通常为”TEMP”或”TMP”环境变量指定的路径,如:”C:/Users/[当前用户名]/AppData/Local/Temp ”。 |
[static] QString homePath() | 返回主目录名称。如Windows系统通常为”C:/Users/[当前用户名]”。 |
[static] QString currentPath() | 返回当前工作目录, 不带”/”结束符。 |
[static] QString setCurrentPath() | 设置当前工作目录。 |
[static] QFileInfoList drives() | 返回系统的根目录列表, Windows系统返回盘符列表。 |
QString absoluteFilePath(const QString &fileName) | 返回当前目录下的fileName文件的带绝对路径的文件名。 |
QString absolutePath() | 返回目录的绝对路径,末尾不带”/”结束符。 |
QString canonicalPath() | 返回目录的规范路径,即不带符号链接或”.””..”冗余。若规范路径不存在,则返回空字符串。 |
QString filePath(const QString &fileName) | 返回目录下的一个文件的目录名。 |
QString dirName() | 返回最后一级目录的名称,若构造QDir对象时,传入的是文件名,则返回带后缀且不带路径的文件名。 |
bool exists() | 判断目录是否存在 |
QStringList entryList(const QStringList &nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) | 有过滤符和排序方式返回当前目录下的所有文件名,子目录名称... |
QStringList entryList(Filters filters = NoFilter, SortFlags sort = NoSort) | 返回当前目录下的所有文件名,子目录名称... |
bool mkdir(const QString &dirName) | 在当前目录下创建名为dirName的子目录。如果调用之前子目录已经存在,则返回false。 |
bool rmdir(const QString &dirName) | 删除dirName指定的目录。 |
bool remove(const QString &fileName) | 删除当前目录下fileName指定的文件。 |
bool rename(const QString &oldName, const QString &newName) | 目录或文件重命名。 |
bool mkpath(const QString &dirPath) | 创建dirPath指定的路径。此函数将创建路径的所有父目录。若调用此函数时,路径已存在,则返回false。 |
bool rmpath(const QString &dirPath) | 删除dirPath指定的路径。这将删除路径指定的所有父目录,前提是它们为空。 |
void setPath(const QString &path) | 设置QDir对象的当前目录。 |
bool removeRecursively() | 删除目录,包括其所有子目录和文件。如果无法删除目录或文件,则继续运行并尝试删除尽可能多的文件和子目录,然后返回false。 如果目录已被删除,则返回true。 |
4. QFile类
QFile类继承自QFileDevice类,是Qt中文件I/O必不可少的类,表4列出了其常用的成员函数。至于其write,read等函数,则是继承其基类QFileDevice类,具体信息可参考Qt帮助文档。
函数原型 | 功能 |
[static] bool copy(const QString &fileName, const QString &newName) | 复制文件fileName到newName。 |
[static] bool rename(const QString &fileName, const QString &newName) | 重命名文件。 |
[static] bool remove(const QString &fileName) | 删除fileName指定的文件。 |
[static] bool exists(const QString &fileName) | 判断文件是否存在。 |
[static bool setPermissions(const QString &fileName, Permissions permissions) | 设置文件的权限。具体权限查看QFileDevice::Permission枚举。 |
[static] Permissions permissions(const QString &fileName) | 返回文件的权限。 |
bool open(OpenMode mode) | 打开文件,打开方式由mode指定。OpneMode的详细信息请查看QIODevice::OpenModeFlag枚举。 |
void close() | 继承自QFileDevice的虚函数,关闭文件。 |
void setFileName(const QString &name) | 设置文件名称,若已调用open()函数打开文件,则不能调用此函数。 |
QString fileName() | 返回setFileName()或构造函数指定的文件名。 |
bool copy(const QString &newName) | 复制文件到newName。 |
bool rename(const QString &newName) | 重命名文件。 |
bool remove() | 删除当前文件。 |
bool exists() | 判断当前文件是否存在。 |
bool setPermissions(Permissions permissions) | 设置当前文件的权限。具体权限查看QFileDevice::Permission枚举。 |
Permissions permissions() | 返回当前文件的权限。 |
qint64 size() | 返回文件的大小,以字节(B)为单位。 |
5. QFileInfo类
QFileInfo类提供文件的各种信息。其静态函数只有一个:exists(),用于判断文件是否存在。表5列出了其常用成员函数。
函数原型 | 功能 |
[static] bool exists(const QString &file) | 判断file指定的文件是否存在。 |
bool exists() | 判断文件是否存在。 |
void setFile(const QString &file) void setFile(const QFile &file) void setFile(const QDir &dir, const QString &file) | 设置文件名作为QFileInfo对象操作的文件。使用构造对象时设置亦可。 |
QString absoluteFilePath() | 返回带文件名的绝对路径 |
QString absolutePath() | 返回不带文件名的绝对路径。路径末尾无”/”结束符。 |
QDir absoluteDir() | 返回由absoluteFilePath()构造的QDir类对象。 |
QString fileName() | 返回不带任何路径的文件名。 |
QString filePath() | 返回包含路径(相对路径或绝对路径,取决于构造对象时使用的路径)的文件名。 |
qint64 size() | 返回文件大小,以字节(B)为单位。 |
QString baseName() | 返回文件基名,第一个”.”之前的文件名。不带任何路径。如:”C:/dir/tmp.tar.gz”, 返回”tmp”。 |
QString completeBaseName() | 返回文件基名,最后一个”.”之前的文件名。如:”C:/dir/tmp.tar.gz”, 返回”tmp.tar”。 |
QString suffix() | 返回最后一个”.”之后的后缀。 |
QString completeSuffix() | 返回第一个”.”之后的后缀。 |
bool isDir() | 判断当前对象是否是目录或目录的快捷方式(symbolic link)。 |
bool isFile() | 判断当前对象是否是文件或文件的快捷方式(symbolic link)。 |
bool isExecutable() | 判断当前对象是否是可执行文件。 |
bool isHidden() | 怕段当前对象是否为不可见对象。 |
bool isSymLink() | 判断当前对象是否是快捷方式(symbolic link)。 |
bool isAbsolute() | 判断当前对象是否是绝对路径。 |
bool isReadable() | 判断用户是否可读当前对象。注意:如果是Windows操作系统,且未启用NTFS权限检查,则返回值仅反映文件是否存在。 |
bool isWriteable() | 判断用户是否可写当前对象。注意:如果是Windows操作系统,且未启用NTFS权限检查,则返回值仅反映文件是否标记为只读。 |
bool makeAbsolute() | 如果文件的路径尚未以绝对路径的形式存在,则将其路径转换为绝对路径。返回true表示路径转换成功; 返回false表示路径已经是绝对路径。 |
QDateTime created() | 返回创建文件的日期和时间。在大多数Unix操作系统上,此函数返回上次状态更改的时间。适用于目录和文件。 |
QDateTime lastModified() | 返回最后一次修改的日期和时间。适用于目录和文件。 |
QDateTime lastRead() | 返回最后一次读取的日期和时间。适用于目录和文件。 |
6. QTemporaryDir和QTemporaryFile类
(1) QTemporaryDir用于操作临时目录,其常用成员如表6-1。
函数原型 | 功能 |
void setAutoRemove(bool b) | 设置是否自动删除。默认启用自动删除功能。 |
bool autoRemove() | 返回是否启用自动删除功能。 |
QString path(const QString &fileName) | 返回创建的临时目录名称。若创建失败,则返回空字符串。 |
bool isValid() | 判断临时目录是否有效。成功创建了临时目录,则返回true,否则返回false。 |
QString errorString() | 如果isValid()返回false,则可用此函数查看错误信息。 |
bool remove() | 删除此临时目录及其所有子目录和文件。 |
(2)QTemporaryFile继承自QFile类,用于操作临时文件,除了继承自QFile类的成员函数外,表6-2列出了其常用的成员函数。
函数原型 | 功能 |
void setAutoRemove(bool b) | 设置是否自动删除。默认启用自动删除功能。 |
bool autoRemove() | 返回是否启用自动删除功能。 |
QString fileTemplate() | 返回设置的文件模板。默认文件模板被称为qcoreappname.XXXXXX,并放在QDir::tempPath()中。 |
bool open() | 以QIODevice::ReadWrite模式打开文件。 |
void setFileTemplate(const QString &name) | 将文件名的静态部分设置为name。如果文件模板包含“XXXXXX”,将自动替换为文件名的唯一部分,否则将根据指定的静态部分自动确定文件名。如果name包含相对文件路径,则该路径将相对于当前工作目录。如果要使用系统的临时目录,可以使用QDir::tempPath()构造name。 |
7. QFileSystemWatcher类
QFileSystemWatcher类用于监听目录和文件。当目录或文件发生改变时(如新建、删除、重命名等)会触发directoryChanged()或fileChanged()信号。表7列出了其常用成员函数和信号。
函数原型 | 功能 |
bool addPath(const QString &path) | 添加一个监听的目录或文件。监视失败的原因通常取决于系统,但可能包括不存在的资源、访问失败或总监视计数限制(如果平台有)。注意:对于可以同时监视的文件和目录的数量,可能存在一个与系统相关的限制。如果达到此限制,则不会监视路径,并返回false。 |
QStringList addPaths(const QStringList &paths) | 添加监听的目录或文件列表。返回值为监听失败的目录或文件列表。 |
QStringList directories() | 返回监听的目录列表。 |
QStringList files() | 返回监听的文件列表。 |
bool removePath(const QString &path) | 移除监听的目录或文件。 |
QStringList removePaths(const QStringList &paths) | 移除监听的目录或文件列表。返回移除失败的目录或文件列表。 |
[signal] void directoryChanged(const QString &path) | 监听的目录发生变化时触发此信号。 |
[signal] void fileChanged(const QString &path) | 监听的文件发生变化时触发此信号。 |