QFile源码学习笔记

QFile源码学习笔记之前简单介绍了Qt读写文件Qt之读写文件http://blog.csdn.net/zhuyunfei/article/details/51249378这里记录下自己学习QFile的笔记。1.在Qt之读写文件中,在打开模式中指定未Append模式,发现如果文件不存在会自动创建新文件,在QFile的源码中找到了原因,在open函数的定义中都有如下语句if(mode&Append)mode

大家好,又见面了,我是你们的朋友全栈君。

之前简单介绍了Qt读写文件

Qt之读写文件

http://blog.csdn.net/zhuyunfei/article/details/51249378

这里记录下自己学习QFile的笔记。

1.在Qt之读写文件中,在打开模式中指定未Append模式,发现如果文件不存在会自动创建新文件,在QFile的源码中找到了原因,在open函数的定义中都有如下语句

if (mode & Append)
    mode |= WriteOnly;

也就是说,只要打开模式中设置了Append模式,都会被赋予WriteOnly模式。

而只有在WriteOnly或者ReadWrite模式下,当文件不存在时,会自动创建文件。

2.文件链接或者说是文件的快捷方式
在windows系统下,对应的说法是通过QFile可以创建文件的快捷方式;在unix系统下,则是文件链接。
创建链接通过调用link()函数,此函数有两种实现方式

bool link(QString& linkName)

bool link(QString& fileName,QString&linkName)

其实第二个函数是调用第一个函数来实现,第二个函数的源码实现方式如下:

QFile(fileName).link(linkName);

在windows环境下创建快捷方式文件,必须含有“.lnk”文件扩展名

查看快捷方式文件的路径

QString symLinkTarget()

QString symLinkTarget(QString& fileName)

这两个函数分别用来取代QT4中的

QString readLink()

QString readLink(QString & fileName)

最后来看个这几个函数的实际使用:

QFile file;

//设置文件名
file.setFileName(QObject::trUtf8("new_test.csv"));

//创建快捷方式
bool status = file.link(QObject::trUtf8("new_test_link.lnk"));

if(status){
    qDebug()<<"link() return true";
}else{
    qDebug()<<"link() return false";
}

//输出快捷方式文件的绝对路径
qDebug()<<"symLinkTarget():"<<QFile(QObject::trUtf8("new_test_link.lnk")).symLinkTarget();

输出结果如下:
这里写图片描述

3.文件的复制,改名和删除
文件复制,实现将QFile文件复制并以新文件名保存。
复制文件相关 函数:

bool copy(QString&newName)

bool copy(QString& fileName,QString&newName)

第二个函数是重载函数,以如下方式直接调用第一个函数实现

QFile(fileName).copy(newName)

文件复制例子:

QFile file;

file.setFileName(QObject::trUtf8("test.csv"));

//判断新文件是否存在
if(!QFile::exists(QObject::trUtf8("new_test.csv"))){
    qDebug()<<"复制文件";
    //复制文件
    bool status = file.copy(QObject::trUtf8("new_test.csv"));

    if(status){
        qDebug()<<"copy file successed!";
    }
}

文件改名,实现把QFile文件由原文件名改为指定的新文件名。相关函数如下:

bool rename(QString & newName)

bool rename(QString& oldName,QString&newName)

类似的,第二个函数是个重载函数,直接使用第一个函数实现

QFile(oldName).rename(newName)

样例代码

QFile file;
file.setFileName(QObject::trUtf8("new_test.csv"));
//改名
file.rename(QObject::trUtf8("new_test.csv"),QObject::trUtf8("new_test_rename.csv"));

文件删除,删除QFile文件,或者删除指定的QFile文件。相关函数如下:

bool remove()

bool remove(QString& fileName)

类似的,第二个函数是个重载函数,直接使用第一个函数实现

QFile(fileName).remove()

样例代码:

QFile file;

file.setFileName(QObject::trUtf8("new_test.csv"));

//删除文件
if(file.remove()){
    qDebug()<<"删除文件成功";
}else{
    qDebug()<<"删除文件失败";
}

4.文件权限
设置文件权限为Permissions指定的权限,设置成功返回true,如果不许编辑文件权限则返回false。相关函数如下:
QFile::Permissions permissions()
QFile::Permissions permissions(QString& fileName)
bool setPermissions(Permissions permissions)
bool setPermissions(QString& fileName,Permissions permissions)

权限表如下:

常量 描述
QFileDevice::ReadOwner 0x4000 文件拥有者可读
QFileDevice::WriteOwner 0x2000 文件拥有者可写
QFileDevice::ExeOwner 0x1000 文件拥有者可执行
QFileDevice::ReadUser 0x0400 用户可读
QFileDevice::WriteUser 0x0200 用户可写
QFileDevice::ExeUser 0x0100 用户可执行
QFileDevice::ReadGroup 0x0040 组用户可读
QFileDevice::WriteGroup 0x0020 组用户可写
QFileDevice::ExeGroup 0x0010 组用户可执行
QFileDevice::ReadOther 0x0004 任何用户可读
QFileDevice::WriteOther 0x0002 任何用户可写
QFileDevice::ExeOther 0x0001 任何用户可执行

代码

    QFile file(QObject::trUtf8("new_test.csv"));

    qDebug()<<"Permissions:"<<file.permissions();

输出结果如下:
这里写图片描述

从结果可知,此文件对任何用户除了可执行权限外,具备其他所有权限.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131874.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 同步类容器和并发类容器的区别_jdk提供的用于并发编程的同步器有

    同步类容器和并发类容器的区别_jdk提供的用于并发编程的同步器有一.为什么会出现同步容器?在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。注意Collection和Map是顶层接口,而List、Set、Queue接口则分别继承了Collection接口,分别代表数组、集合和队列这三大类容器。像ArrayList、LinkedList都是实现了List接口,HashSet实现了Set接口,而Deque(双向队列,允许…

  • MybatisPlus逻辑删除

    MybatisPlus逻辑删除**MybatisPlus逻辑删除的使用**首先我们要知道为什么要进行逻辑删除:逻辑删除可以理解为假删除,并不是真的将数据进行删除。假删除只是为了数据安全起见,在数据库中增添一个字段,我们可以默认这个字段为1时数据被删除,而字段值为0时数据被删除想象一下这样的业务场景,当一位公司职员离职,但是手续还没有办理,这时我们便可以设置逻辑删除,以保证其信息不会被立刻删除。我们电脑里的回收站正是利用了逻辑删除,我们点击删除的文件不会被立刻删除,而是放入回收站,等我们反悔时可以将其进行还原。在Mybat

  • java 流媒体服务器搭建_搭建流媒体服务器(1)

    java 流媒体服务器搭建_搭建流媒体服务器(1)一、前语本文纂写时间是2018年12月17日,所描述的软件WowzaMediaServer此时已经出了4或更高,但是2.2.2提供的功能已经是Goodenoughforme.如果发现4足够更好,后面文章也许会再续。本文试图描述一个在WindowsServer2012上安装了WowzaMediaServerv2.2.2流媒体服务的事件。最终会另服务器提供给外部适当的Server和…

  • php avc,什么是AVC编码?简述H.264概念和发展

    php avc,什么是AVC编码?简述H.264概念和发展频编解码技术有两套标准,国际电联(ITU-T)的标准H.261、H.263、H.263+等;还有ISO的MPEG标准Mpeg1、Mpeg2、Mpeg4等等。H.264/AVC是两大组织集合H.263+和Mpeg4的优点联合推出的最新标准,最具价值的部分无疑是更高的数据压缩比。在同等的图像质量条件下,H.264的数据压缩比能比H.263高2倍,比MPEG-4高1.5倍。以下我们简单介绍H.264的…

  • ubuntu16.04 安装 Eric6「建议收藏」

    从安装qt,到安装qtpy,到安装Eric6,这是一个很痛苦的过程。总是会有一大段的错误,然后在网上各种搜索,然后去改,然后还是有新的错误,又去找答案,一直重复,我都快崩溃了。最后,终于,找到这一篇博客:http://blog.csdn.net/suxiang198/article/details/52042526。这篇博客解决了大部分坑,不过到后面部分还是出现了问题,安装不上去。最后,终于在E

  • 讨论UML概念和模型UML九种图。

    讨论UML概念和模型UML九种图。

    2021年12月17日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号