QT(15)- QFile
1 函数
1.1 copy
bool QFile::copy(const QString &newName)
QFile::copy(const QString &newName) 是 Qt 中用于复制文件的函数,将 fileName() 所指向的文件复制到 newName 指定的新位置。
在复制文件之前,源文件会先被关闭。如果被复制的文件是一个符号链接(symlink),那么它所引用的文件会被复制,而不是链接本身。除了权限以外,其他的文件元数据都不会被复制。
如果成功复制文件,则返回 true;否则返回 false。请注意,如果 newName 已经存在一个同名文件,则 copy() 函数将返回 false,表示无法覆盖该文件,不会执行复制操作。
必须指定完整的路径和文件名
1.2 exists
bool QFile::exists()
QFile::exists() const 是 Qt 中用于检查文件是否存在的函数,如果文件存在则返回 true;否则返回 false。
该函数没有参数,它使用 fileName() 方法获取当前 QFile 对象表示的文件路径,并检查该文件是否存在。如果文件存在,则返回 true;否则返回 false。
bool QFile::exists(const QString &fileName)
是一个静态函数,用于检查指定文件名的文件是否存在,如果文件存在则返回 true;否则返回 false。
该函数的参数是一个 QString 对象,表示要检查的文件名。函数将检查该文件名指定的文件是否存在,如果文件存在,则返回 true;否则返回 false。
需要注意的是,如果 fileName 是一个符号链接(symlink)并且指向一个不存在的文件,那么该函数将返回 false。
1.3 link
bool QFile::link(const QString &linkName)
QFile::link(const QString &linkName) 是 Qt 中用于创建链接(link)的函数。它会在文件系统中创建一个名为 linkName 的链接,指向当前 QFile 对象表示的文件。链接的类型(例如在 Windows 上是快捷方式或在 Unix 上是符号链接)取决于底层文件系统。如果成功创建了链接,则返回 true;否则返回 false。
需要注意的是,该函数不会覆盖文件系统中已经存在的任何实体。如果 linkName 已经存在,则 link() 函数将返回 false,并将 error() 设置为 QFile::RenameError,表示无法创建链接。
另外,需要注意的是,在 Windows 上要创建有效的链接,linkName 必须具有 .lnk 文件扩展名。
QString name = "E:/dd/QT/test/FileDemo/bin/";QFile file("1.txt");bool ok = file.link(name+"1.lnk");if(ok){qDebug()<<"true";}else{qDebug()<<"false";}
1.4 open
bool open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
QFile::open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) 是 QFile 类中用于打开现有文件句柄的函数。它使用给定的文件句柄 fh 以指定的模式 mode 打开文件,并使用 handleFlags 指定文件句柄标志。如果成功打开文件,则返回 true;否则返回 false。
需要注意的是,如果文件打开成功并使用 QFile 对象进行操作,那么 QFile::close() 函数的行为将受到 QFileDevice::AutoCloseHandle 标志的控制。如果 AutoCloseHandle 标志被指定,而且这个函数成功执行,那么调用 QFile::close() 将关闭被采用的文件句柄。否则,QFile::close() 不会真正关闭文件,只是将其刷新。
另外需要注意的是,如果文件句柄 fh 指向的不是一个常规文件(例如,它是标准输入、标准输出或标准错误输出),那么您可能无法使用 QFile 对象的 seek() 函数,而且 size() 函数会返回0。有关更多信息,请参见 QIODevice::isSequential()。
由于该函数打开文件时没有指定文件名,因此不能使用该 QFile 对象与 QFileInfo 配合使用。
需要注意的是,在 Windows 平台上,必须以二进制模式打开文件句柄 fh(即,模式字符串必须包含 ‘b’,例如 “rb” 或 “wb”),才能访问文件和其他随机访问设备。如果向模式中传递 QIODevice::Text,Qt 将转换行尾字符。而对于顺序设备(例如标准输入和标准输出),不受此限制。
如果要在控制台应用程序中使用标准输入、标准输出和标准错误输出流,则需要启用控制台应用程序支持。为此,需要在应用程序的项目文件中添加以下声明:
CONFIG += console
下面是一个使用 QFile::open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) 函数打开现有文件句柄的示例代码:
#include <QFile>
#include <cstdio>int main()
{FILE *fh = std::fopen("my_file.txt", "r");if (!fh) {return 1;}QFile file;if (file.open(fh, QIODevice::ReadOnly)) {// File opened successfully}return 0;
}
bool open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
QFile::open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) 是 QFile 类中用于打开现有文件描述符的函数。它使用给定的文件描述符 fd 以指定的模式 mode 打开文件,并使用 handleFlags 指定文件句柄标志。如果成功打开文件,则返回 true;否则返回 false。
需要注意的是,如果文件打开成功并使用 QFile 对象进行操作,那么 QFile::close() 函数的行为将受到 QFileDevice::AutoCloseHandle 标志的控制。如果 AutoCloseHandle 标志被指定,而且这个函数成功执行,那么调用 QFile::close() 将关闭被采用的文件句柄。否则,QFile::close() 不会真正关闭文件,只是将其刷新。
另外需要注意的是,如果文件描述符 fd 指向的不是一个常规文件(例如,它是标准输入、标准输出或标准错误输出),那么您可能无法使用 QFile 对象的 seek() 函数,而且 size() 函数会返回0。有关更多信息,请参见 QIODevice::isSequential()。
由于该函数打开文件时没有指定文件名,因此不能使用该 QFile 对象与 QFileInfo 配合使用。
下面是一个使用 QFile::open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) 函数打开现有文件描述符的示例代码:
#include <QFile>
#include <unistd.h>int main()
{int fd = ::open("my_file.txt", O_RDONLY);if (fd == -1) {return 1;}QFile file;if (file.open(fd, QIODevice::ReadOnly)) {// File opened successfully}return 0;
}
在此示例中,我们使用标准 C 函数 ::open() 打开一个文件,然后将文件描述符传递给 QFile::open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) 函数来打开文件。
如果文件成功打开,则程序将会执行相应的操作。需要注意的是,在此示例中,我们没有手动关闭文件,因为 QFile 对象销毁时会自动关闭该文件。
bool QFile::open(QIODevice::OpenMode mode)
QFile::open(QIODevice::OpenMode mode) 是 QFile 类中的函数,用于打开文件并指定打开模式。如果打开文件成功,返回 true;否则返回 false。
打开模式必须为 QIODevice::ReadOnly、QIODevice::WriteOnly 或 QIODevice::ReadWrite,并且可以具有其他标志,例如 QIODevice::Text 和 QIODevice::Unbuffered。
需要注意的是,在 WriteOnly 或 ReadWrite 模式下,如果相关文件不存在,此函数将在打开文件之前尝试创建一个新文件。
1.5 remove
bool QFile::remove()
QFile::remove() 是 QFile 类中的函数,用于删除指定的文件。如果成功删除文件,则返回 true,否则返回 false。
需要注意的是,删除文件前会自动关闭该文件。
bool QFile::remove(const QString &fileName)
静态函数
QFile::remove(const QString &fileName) 是 QFile 类中的函数的重载版本,用于删除指定的文件。如果成功删除文件,则返回 true,否则返回 false。
需要注意的是,删除文件前会自动关闭该文件。
1.6 rename
bool QFile::rename(const QString &newName)
QFile::rename(const QString &newName) 是 QFile 类中的函数,用于将当前指定的文件重命名为 newName。如果成功重命名文件,则返回 true,否则返回 false。
需要注意的是,如果已存在名为 newName 的文件,则 rename() 函数将返回 false,并不会覆盖原有文件。
重命名文件前会自动关闭该文件。
如果重命名操作失败,Qt 将尝试将该文件的内容复制到 newName,然后删除该文件,仅保留 newName。如果复制操作失败或者无法删除该文件,则将删除目标文件 newName,以恢复旧状态。
bool QFile::rename(const QString &oldName, const QString &newName)
静态函数
QFile::rename(const QString &oldName, const QString &newName) 是 QFile 类中的另一个函数,用于将旧文件名 oldName 重命名为新文件名 newName。如果成功重命名文件,则返回 true,否则返回 false。
需要注意的是,如果已存在名为 newName 的文件,则 rename() 函数将返回 false,并不会覆盖原有文件。
1.7 setFileName
void QFile::setFileName(const QString &name)
QFile::setFileName(const QString &name) 是 QFile 类中的函数,用于设置文件的名称。文件名可以没有路径、有相对路径或绝对路径。
请注意,如果文件已经被打开,请不要调用此函数。
如果文件名没有路径或有相对路径,则 open() 调用时所在的应用程序的当前目录路径将被使用。
file.setFileName("3.txt");
bool ok = file.open(QIODevice::WriteOnly);if(ok)
{qDebug()<<"true";file.write("hello\n",6);
}
else
{qDebug()<<"false";
}
file.close();
1.8 symLinkTarget
QString QFile::symLinkTarget() const
QFile::symLinkTarget() const 是 QFile 类中的函数,用于返回符号链接所指向的文件或目录的绝对路径,如果对象不是符号链接,则返回一个空字符串。
需要注意的是,返回的文件名字符串可能并不代表一个实际存在的文件,它只是一个字符串。如果符号链接指向一个实际存在的文件,则 QFile::exists() 函数将返回 true。
2 虚函数
virtual QString fileName() const override
用于返回当前文件的路径和名称。
virtual bool open(QIODevice::OpenMode mode) override
见1.4
virtual QFileDevice::Permissions permissions() const override
用于返回当前文件的权限。
返回值是 QFileDevice::Permissions 类型,其中包含一些标志,表示文件的不同权限,例如可读、可写、可执行等。
以下是 QFileDevice::Permissions 中定义的枚举值:
QFileDevice::ReadOwner: 文件所有者可读取。
QFileDevice::WriteOwner: 文件所有者可写入。
QFileDevice::ExeOwner: 文件所有者可执行。
QFileDevice::ReadUser: 文件用户可读取。
QFileDevice::WriteUser: 文件用户可写入。
QFileDevice::ExeUser: 文件用户可执行。
QFileDevice::ReadGroup: 文件组可读取。
QFileDevice::WriteGroup: 文件组可写入。
QFileDevice::ExeGroup: 文件组可执行。
QFileDevice::ReadOther: 其他用户可读取。
QFileDevice::WriteOther: 其他用户可写入。
QFileDevice::ExeOther: 其他用户可执行。
可以使用按位或运算符将多个值组合在一起
virtual bool resize(qint64 sz) override
使用前需要先open文件
类中的函数,用于改变文件的大小,使其变为指定的大小 sz 字节。
如果文件原本较小,resize() 将会在文件末尾添加空字节,以扩展文件大小。如果文件原本较大,resize() 将截断文件,并将其大小设置为指定的大小 sz 字节。
该函数返回一个 bool 类型的值,指示函数是否成功执行。如果返回值为 true,表示函数执行成功,否则表示函数执行失败。
virtual bool setPermissions(QFileDevice::Permissions permissions) override
设置权限
virtual qint64 size() const override
返回文件大小
3 静态函数
bool copy(const QString &fileName, const QString &newName)
见1.1
QString decodeName(const QByteArray &localFileName)
QString decodeName(const char *localFileName)
decodeName() 是 QFile 类的静态函数,用于将本地文件名转换为字符串。在大多数情况下,文件名都可以使用 UTF-8 编码。然而,有些操作系统(如 Windows)使用本地编码来存储文件名。因此,在读取这些文件时,需要将本地编码转换为 Unicode 编码,以便正确地显示文件名。
decodeName() 函数可以将本地编码的文件名转换为 Unicode 编码的字符串。该函数有两种重载形式:
QString QFile::decodeName(const QByteArray &localFileName):将 localFileName 转换为字符串。
QString QFile::decodeName(const char *localFileName):将 C 字符串 localFileName 转换为字符串。
QByteArray encodeName(const QString &fileName)
encodeName() 是 QFile 类的静态函数,用于将字符串转换为本地编码的文件名。在大多数情况下,文件名都可以使用 UTF-8 编码。然而,有些操作系统(如 Windows)使用本地编码来存储文件名。因此,在写入这些文件时,需要将 Unicode 编码的文件名转换为本地编码,以便正确地写入文件。
encodeName() 函数可以将 Unicode 编码的文件名转换为本地编码的字节数组。该函数有一个形式如下的重载:QByteArray QFile::encodeName(const QString &fileName):将 fileName 转换为本地编码的字节数组。
bool exists(const QString &fileName)
见1.2
bool link(const QString &fileName, const QString &linkName)
见1.3
QFileDevice::Permissions permissions(const QString &fileName)
见2.3
bool remove(const QString &fileName)
见1.5
bool rename(const QString &oldName, const QString &newName)
见1.6
bool resize(const QString &fileName, qint64 sz)
见2
bool setPermissions(const QString &fileName, QFileDevice::Permissions permissions)
见2
QString symLinkTarget(const QString &fileName)
见1.8
相关文章:

QT(15)- QFile
1 函数 1.1 copy bool QFile::copy(const QString &newName) QFile::copy(const QString &newName) 是 Qt 中用于复制文件的函数,将 fileName() 所指向的文件复制到 newName 指定的新位置。 在复制文件之前,源文件会先被关闭。如果被复制的文…...

GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的
GaiaX跨端模板引擎,是在阿里优酷、淘票票、大麦内广泛使用的Native动态化方案,其核心优势是性能、稳定和易用。本系列文章《GaiaX开源解读》,带大家看看过去三年GaiaX的发展过程。 前言 GaiaX【https://github.com/alibaba/GaiaX】是由优酷应…...

python中adb shell相关操作
1、python 实现adb交互,进入adb shell后,如何再发送消息 os.popen("adb -s 192.168.1.100:5555 shell \"dmesg > /data/dmesg.log\"")进入进入adb shell,在执行 dmesg > /data/dmesg.log 2、python(或BAT脚本)自…...

python 之 资源使用与控制 resource模块
一、背景 2021年做可信计算时,由于甲方给的CPU利用率不能不能超过20%; 目的:我们的程序部署甲方服务器上不能阻碍其甲方服务的正常运行 我们的程序在CPU超过20%时,可以休眠几秒后继续运行 此时需要检测控制服务器的CPU资源使用信…...

蓝库云|8项关键让你看透企业「数字转型」,零代码是惊喜
各行各业都要面对的多方竞争力及不断上涨的经营成本,以及随着时代的发展,有不少企业纷纷推动数字化转型,考虑藉着应用现代化的数据和科技工具的结合,协助企业创造新的营运模式及收入来源,以提升自动化效率、优化客户体…...

(五)、编辑页面-发布长文-富文本编辑【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
1,edit页面 1.1 新建edit页面 1.2 从本地相册选择图片或使用相机拍照。 uni.chooseImage(OBJECT) 1.3 直接上传文件到云存储。 uploadFile(Object object) 1.4 从富文本编辑器获取编辑器内容 editorContext.getContents(OBJECT) 首页富文本编辑器初始化完成时…...

你是真的“C”——【经典面试知识点】数据在内存中的大小端存储方式
你是真的“C”——【经典面试知识点】数据在内存中的大小端存储方式😎前言🙌大小端介绍🙌什么大端小端呢?:大小端存储的标准定义:大端和小端存在的意义经典的面试题目🙌总结撒花💞&a…...

从零开始的数模(二十六)单因素方差分析
目录 一、概念 1.1相关概念 1.2用途 1.3数据要求:独立性/正态性/方差齐性 1.4步骤 编辑1.5专业名词 二、基于python的单因素方差分析 2.2单因素方差分析的作用 一、概念 1.1相关概念 单因素方差分析是一种常用的统计分析方法,它用于比较一个因…...

C++变量类型
目录 一、c中的变量定义 二、c中的变量声明 三、c中的左值和右值 一、c中的变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。 变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示&…...

win10 安装 vs2015(社区版本)以及opencv-4.5.5
一、下载vs2015以及opencv-4.5.5从https://msdn.itellyou.cn/ 网站下载vs2015(社区版本)从https://opencv.org/releases/网站下载opencv-4.5.5二、安装vs2015和opencv-4.5.5解压后双击exe安装文件,完成安装(默认)双击下…...

867. 转置矩阵
给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2&a…...

Datawahle组队学习——妙趣横生大数据 Day1
妙趣横生大数据 Day1[妙趣横生大数据 Juicy Big Data](https://datawhalechina.github.io/juicy-bigdata/#/?id妙趣横生大数据-juicy-big-data)一、大数据概述大数据——第三次信息化浪潮大数据概念大数据应用大数据关键技术二、Hadoop背景介绍特性项目架构实验1. 准备工作2. …...

网友眼中越老越吃香的行业,果然是风向变了!
越老越吃香的行业,一直都是被热议的话题。对于年轻人来说,找到一个适合自己的并且具有前景的工作,不是一件容易的事情。 最近,看到有人在平台上问相关的问题,本着认真看一看的态度点进去,却差点被热评第一…...

为什么时间序列预测这么难?本文将给你答案
机器学习和深度学习已越来越多应用在时序预测中。ARIMA 或指数平滑等经典预测方法正在被 XGBoost、高斯过程或深度学习等机器学习回归算法所取代。 尽管时序模型越来越复杂,但人们对时序模型的性能表示怀疑。有研究表明,复杂的时序模型并不一定会比时序…...

STC15系列单片机通过串口多字节数据读写EEPROM操作
STC15系列单片机通过串口多字节数据读写EEPROM操作📌相关篇《STC15系列单片机EEPROM读写示例》 ⛳手册勘误信息注意事项 ⚡在手册上面描述STC15F2K60S2及STC15L2K60S2系列单片机内部EEPROM还可以用MOVC指令读,但此时首地址不再是0000H,而是程…...

计算机网络-ip数据报
在图中,网络层包含了四种协议:ARP、IP、ICMP、IGMP,由上下关系表明,ARP为IP协议服务,IP为ICMP和IGMP服务。 IP数据报格式 此处不区分数据报和分组的概念:当数据部分过长时,将数据部分拆分&…...

从零开始学C
以下是 该如何学习C语言的【思维导图】以及部分重点知识点的【博客链接】。其实C语言并不难,难的是没有人去教,没有耐心去学。不知道从哪下手学习,我将C的知识点做成一个思维导图,以供迷茫的小白参考,哪里不会…...

【云原生】手把手带你从零开始搭建kubernetes最新版本实战
文章目录前言一. 实验环境二. k8s 的介绍三 . k8s的安装3.1 搭建实验环境3.1.1 硬件层面的要求3.1.2 软件层面环境配置3.2 docker的安装3.2.1 搭建docker3.2.2 部署 cri-dockerd3.3 部署k8s3.3.1 配置添加阿里云的yum源3.3.2 安装kubeadm kubelet kubectl3.3.3 k8s-master节点初…...

trivy os软件包扫描原理分析
具体可以基于之前的博客来做 基于trivy获取基础镜像 参数修改一下: cliOpt.ListAllPkgs true 结果中会带有如下格式的结果: "Results":[{"Target":"192.168.1.94:443/test22/centos:7 (centos 7.9.2009)","Clas…...

算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ
算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物…...

Java 基础(1)—泛型简单使用
一、泛型定义及作用 泛型是一种编程机制,允许在编写代码时使用参数化类型,以在编译时实现类型安全。 以下是泛型作用: 增强代码可读性和可维护性:通过在代码中使用泛型参数,可以使代码更清晰、更具有可读性和可维护性…...

内存卡损坏了怎么恢复?
内存卡损坏了怎么恢复?现在我们身边有不少电子设备都是用存储卡来存储数据的。一旦需要方便我们直接导出使用。但这存储的数据也不是一定安全的,当我们将内存卡连接到电脑时,难免会碰到病毒、格式化等提示,在这些情况下,可能会导…...

Mysql使用规范(纯技术和实战建议)
1、事务隔级别: (强制):Repeatable-Read(重复读),且不能在会话操作时临时开启隔离级别。 注: Repeatable-Read(重复读)隔离级别解决不了幻读。 可用 show variables l…...

Netty源码解读-EventLoop(二)
一、简介 NioEventLoop的重要组成:Selector、线程、任务队列,他既会处理io事件,也会处理普通任务和定时任务. 1.下面是Selector,注意有两个哦后面会讲 2.下面的爷爷类提供的Thread变量,其实下面发excutor用的就是这个…...

OSI模型详解
今天,我们详解OSI(Open System Inter-connection Reference Model)模型,来看看工业物联网的网络互联和数据互通。 OSI模型 1984年,国际标准化组织(International Organization for Standardization&#…...

Share Creators完成500万美元融资,以工具化手段帮助企业从数字资产管理中解放
近日,总部位于旧金山湾区的初创公司Share Creators宣布完成了新一轮500万美元的融资,投资方为五源资本和福昕PDF。本轮融资主要用于扩大客户基础,并加速在美国、欧洲和亚洲的业务发展。近几年,企业内容及数字资产管理全球市场正在…...

几个Base64编码工具,也有蹊跷
起因 需求:对一段内容进行base64加密,然后通过url的get请求进行发送到后台,由于加密的内容比较少,base64串也不是很长,我认为此方案可行。 于是找了三个base64编码的在线工具,分别是: 平台1&…...

Python|每日一练|排序|递归|字符串|数组|动态规划|单选记录:以特殊格式处理连续增加的数字|正则表达式匹配|地下城游戏
1、以特殊格式处理连续增加的数字(排序) 贡献者:EricLao 给出一串数字, 程序要把数字按照这样的格式输出,把连续增加的数字用 [x-y] 的形式表示,只显示这一组顺序数字的首位两个数字,不连续增…...

Spring Cloud微服务网关Gateway组件
目录 网关简介 什么是Spring Cloud Gateway Spring Cloud Gateway 功能特征 核心概念 工作原理 Spring Cloud Gateway快速开始 环境搭建 集成Nacos 路由断言工厂(Route Predicate Factories)配置 自定义路由断言工厂 过滤器工厂( …...

cluster nodes(集群节点)
CLUSTER NODES 复制 自3.0.0起可用。 时间复杂度: O(N)其中N是 Cluster 节点的总数 Redis 集群中的每个节点都有其当前集群配置的视图,由已知节点的集合给出,我们与这些节点的连接状态,它们的标志&…...