简述

在QT中,我们时常要对文件进行各种操作,比如文件的创建、写入、拷贝和删除等等,这些都要用到QFile类。

QFile类提供了读写文件的接口。一般情况下,我们可以直接在调用构造函数的时候传递文件名,这是比较方便的方法。或者使用QFile创建对象,再调用setFileName()方法来设置文件路径。其中文件名中的路径分隔符要求必须是'/',其他分隔符QFile不支持。

常用接口

QFile构造函数:

QFile(const QString & name)

QFile(QObject * parent)

QFile(const QString & name, QObject * parent)

QFile的常用函数:

文件打开模式:


代码之路

1.创建并打开文件.

C++
//初始化时加载文件路径
QFile file("F:/test/xxx.txt");
//以读写的方式打开文件,成功返回true,失败返回false
//想用其他方式打开文件,请看上面的文件打开模式
bool ok = file.open(QIODevice::ReadWrite);
//如果文件不存在,则创建并打开该文件

2.判断文件是否存在.

C++
//判断指定文件是否存在.也可以用来判断在指定路径下是否有文件和你将要创建的文件重名.
//存在返回true,不存在返回false
bool exist = QFile::exists("F:/test/xxx.txt");

3.拷贝文件.

C++
//把D盘里的xxx.txt拷贝到到F盘,命名为sss.txt
//拷贝成功返回true,失败返回false
bool ok = QFile::copy("D:/xxx.txt", "F:/sss.txt");

4.给文件重命名

C++
QFile file("F:/xxx.txt");
bool ok = file.rename("F:/sss.txt");
//重命名成功返回true,失败返回false
//也可以直接调用
bool ok = QFile::remove("F:/xxx.txt", "F:/sss.txt");

5.获取用户对指定文件的权限,是否可读

C++
QFlags<QFileDevice::Permission> power = QFile::permissions("F:/xxx.txt");
//判断文件所有者是否可读
if (power.testFlag(QFile::ReadOwner))
qDebug("Can Read!");

6.写入文件

C++
//定义文件内容字符串
QString str= "写入文件的内容";
QFile file("F:/xxx.txt");
//打开文件,不存在则创建
file.open(QIODevice::ReadWrite | QIODevice::Text);
//写入文件需要字符串为QByteArray格式
file.write(str.toUtf8());
file.close();

7. 读取文件数据

C++
//先打开文件
QFile file("F:/xxx.txt");
file.open(QIODevice::ReadOnly | QIODevice::Text); //使用QTextStream一行一行读取文件
QTextStream in(&file);
while (!in.atEnd())
{
QString line = in.readLine(); //整行读取
qDebug() << line;
}

8.删除文件

C++
QFile file("F:/xxx.txt");
bool ok = file.remove();
//删除成功返回true,失败返回false
//也可以直接调用
bool ok = QFile::remove("F:/xxx.txt");

9.获取文件夹下所有文件

C++
QDir *dir = new QDir("F:/");
QStringList filters;
filters << "*.png" << "*.jpg" << "*.bmp"; //过滤器,过滤你想要的文件后缀
//用链表保存过滤的文件名
QList<QFileInfo> *fileInfo = new QList<QFileInfo>(dir->entryInfoList(filters)); //获取文件数目、文件名称
for(int i = 0; i < fileInfo->count(); i++)
{
//QFileInfo(路径名的Qstring字符串).filename可以直接取到路径中的文件名
qDebug() << fileInfo->at(i).fileName();
}

————————————————

版权声明:本文为CSDN博主「Sakuya__」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Sakuya__/article/details/87806135

QT 对文件的操作(创建、拷贝、写入、删除)的更多相关文章

  1. 【QT】文件读写操作

    读取输出: QFile file("D:/Englishpath/QTprojects/1.dat"); if(!file.open(QIODevice::ReadOnly)) { ...

  2. C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!

    https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...

  3. PHP 文件夹操作「复制、删除、查看大小」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

  4. PHP 文件夹操作「复制、删除、查看大小、重命名」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

  5. javascript数组操作(创建、元素删除、数组的拷贝)

    这篇文章主要介绍了javascript数组操作,包括创建.元素的访问.元素删除.数组的拷贝等操作,还有其它示例,需要的朋友可以参考下 1.数组的创建 复制代码 代码如下: var arrayObj = ...

  6. PHP 文件夹操作「复制、删除、查看大小」迭代实现

    "既然递归能很好的解决,为什么还要用迭代呢"?主要的原因还是效率问题-- 递归的概念是函数调用自身,把一个复杂的问题分解成与其相似的多个子问题来解决,可以极大的减少代码量,使得程序 ...

  7. 节点操作-创建并添加&删除节点&替换&克隆节点

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  8. java文件IO操作

    package com.io; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream ...

  9. PHP 文件和文件夹操作

    文件夹操作 创建文件夹 mkdir(名称,权限,递归创建):创建文件 例如: #创建文件夹 mkdir('./aa') # 创建 aa 文件夹 mkdir('./aa/bb') # 在 aa 目录下创 ...

  10. Qt模拟C#的File类对文件进行操作

    其实只是QT菜鸟为了练习而搞出来的 文件头: #include <QFile> #include <QString> #include <iostream> #in ...

随机推荐

  1. 主流负载均衡器LVS、Nginx、HAProxy介绍

    一.简单介绍 1.1 LVS LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器,LVS由用户空间的ipvsadm和内核空间的ipvs组成,ipvsadm用来定义规则, ...

  2. ansible-playbook常用模块

    lineinfile 此模块是针对文件特殊行,使用后端引用的正则表达式来替换. - hosts: 192.168.50.1 gather_facts: no tasks: - name: 设置UseD ...

  3. 开源大数据调度系统Taier技术公开课——Taier数据开发介绍

    一键直达直播间 一.直播介绍 之前的内容,我们为大家分享了Taier入门及控制台,以及Taier的Web前端架构介绍,本期我们为大家分享Taier数据开发介绍. 本次直播我们将从Taier的数据开发功 ...

  4. 替换GitLab的方案之Gitea

    概述 官网:https://docs.gitea.com/zh-cn/ GitHub地址:https://github.com/go-gitea/gitea Gitea 是一个轻量级的 DevOps ...

  5. 从零开发Vim-like编辑器(02)探讨编辑器对文本的解析与呈现设计思路

    本文同步发布在我的个人博客:https://zhen.wang 前言 前一篇文章作为开篇,只是介绍了Ratatui的相关使用,引出了一些概念.从本文开始,我们正式进入咱们的Vim-like编辑器的开发 ...

  6. .NET应用中的高效分布式同步解决方案

    前言 在分布式系统中,多个线程.进程或服务之间常常需要并发访问共享资源,这就带来了数据同步与一致性的挑战.今天大姚给大家分享一个.NET应用中的高效分布式同步解决方案:DistributedLock. ...

  7. VUE3.0 路由(routes) createWebHistory和createWebHashHistory

    createWebHistory路由模式路径不带#号(生产环境下不能直接访问项目,需要nginx转发) http://localhost:8080/#/ const router = createRo ...

  8. CF1227G Not Same 题解

    CF1227G Not Same 构造.考虑按照每个数字进行考虑,每次填充一列. 观察样例 \(1\),不难发现可以构造使每一行或列一定有一个位置为 \(0\).我们不妨对于每一列限定这个 \(0\) ...

  9. 从“有”到“优”:iPaaS 赋能企业 API 服务治理建设

    在企业发展的过程中,企业引入了不同的业务系统,CRM.WMS.OMS以及OA.ERP等内部协同系统,API接口数量呈指数级增长,接口越来越多,企业难免会遇到各种问题,那么,API接口如何从" ...

  10. Probability•概率的公理化定义•确定概率的方法{频率, 古典, 几何, 主观}•Joseph Louis Bertrand贝特朗奇多解论源于概率建模及其样本空间可有多种假设

    Probability 概率的公理化定义 非负性 正则性 互不相容的可列可加性 确定概率的方法(一审题,二确定样本空间&Omega, 三确定事件集合, 四求解): 频率 抛硬币正面朝上次数: ...