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] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物…...
从“Hello World”到区域赛银牌:我的ACM算法打怪升级全记录(附各阶段工具包)
从“Hello World”到区域赛银牌:我的ACM算法打怪升级全记录 记得大一刚接触编程时,连最简单的冒泡排序都要调试半天。三年后站在领奖台上,回想这段旅程,最珍贵的不是奖牌,而是那些深夜debug的坚持和突破自我的瞬间。这…...
告别C盘爆满!手把手教你配置Miniforge,让所有虚拟环境乖乖待在D盘
彻底解放C盘空间:Miniforge虚拟环境全迁移至D盘实战指南 每次打开资源管理器看到C盘飘红的存储条,心跳都会漏半拍——这大概是Windows开发者最熟悉的焦虑场景。特别是当你发现conda创建的虚拟环境正悄无声息吞噬着宝贵的系统盘空间时,那种无…...
AutoDL部署大模型后,除了Chat:手把手教你用本地API接口玩转文档总结、代码生成和智能客服
AutoDL部署大模型后,除了Chat:手把手教你用本地API接口玩转文档总结、代码生成和智能客服 当你已经在AutoDL上成功部署了大语言模型,并验证了基础的聊天功能后,是否思考过如何将这些能力真正融入日常工作流?本文将带你…...
5步攻克TradingAgents-CN本地化部署:从环境搭建到智能体协同
5步攻克TradingAgents-CN本地化部署:从环境搭建到智能体协同 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 一、问题定位࿱…...
AgentCPM-Report研报系统实操:Pixel Epic贤者响应延迟优化教程
AgentCPM-Report研报系统实操:Pixel Epic贤者响应延迟优化教程 1. 认识Pixel Epic智识终端 Pixel Epic是一款基于AgentCPM-Report大模型构建的创新研究报告辅助系统。与传统AI工具不同,它将枯燥的科研过程转化为一场像素风格的RPG冒险。在这个系统中&a…...
Magma智能剪辑系统:视频自动生成实战
Magma智能剪辑系统:视频自动生成实战 1. 引言 想象一下这样的场景:你有一个精彩的视频创意,写好了详细的脚本,但面对一堆零散的素材片段却无从下手。传统的视频剪辑需要逐帧挑选、拼接、添加转场,一个几分钟的视频可…...
3分钟免费激活Windows和Office:KMS_VL_ALL_AIO终极指南
3分钟免费激活Windows和Office:KMS_VL_ALL_AIO终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档突然变成只…...
手把手教你用Cline插件5分钟搞定DeepSeek-R1模型接入(附硅基流动平台2000万Token福利)
5分钟极速上手:用Cline插件无缝对接DeepSeek-R1大模型实战指南 当你第一次听说只需要5分钟就能让一个强大的AI模型为你工作时,可能会觉得这像是某种夸张的营销话术。但作为一个曾经花了整整三天时间才搞定第一个模型接入的开发者,我可以负责任…...
Git-RSCLIP真实场景测试:城市新区地物分类,住宅区识别效果惊艳
Git-RSCLIP真实场景测试:城市新区地物分类,住宅区识别效果惊艳 1. 模型背景与核心能力 Git-RSCLIP是北航团队基于SigLIP架构专门开发的遥感图像理解模型,在1000万对遥感图文数据集(Git-10M)上进行了深度预训练。与通用视觉模型不同…...
软考高项“上岸”指南:三位宝藏老师,专治你的备考焦虑
备战软考高项,尤其是面对2026年可能更加灵活的考情,选择一位对的引路人至关重要。今天,就为大家深度介绍软考老金团队的三位王牌导师——尹老师、金老师、秦老师。他们风格互补,却有着共同的目标:陪你稳稳上岸。尹老师…...
