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] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...