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();

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

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux云服务器挖矿病毒(crypto和pnscan)导致CPU占用100%问题解决方案「建议收藏」

    Linux云服务器挖矿病毒(crypto和pnscan)导致CPU占用100%问题解决方案「建议收藏」木马攻击问题由来阐述我买了三年的阿里云服务器(在阿里云官网买的),已经使用了一年多了,平时拿来搭建网站,有时也拿来学习技术和开发测试,一直使用很稳定。直到近期我服务器上安装了docker并部署了springboot+mysql+nginx项目,就被攻击了。但就在今年的5月14号,我的服务器被木马攻击,然后被拿去挖矿了。我服务器的cpu持续维持在CPU100%.后果是直接导致我网站无法正常请求和响应。而且Linux服务器的root权限被窃取了。黑客在服务器/root/.ssh目录下生成了连root用户

    2022年5月1日
    56
  • 再次研究消息队列记的笔记——activemq

    再次研究消息队列记的笔记——activemq

    2021年7月12日
    78
  • xposed hook所有类的所有函数

    xposed hook所有类的所有函数

    2021年7月7日
    394
  • 爬虫案例分析_爬虫爬取司法案例

    爬虫案例分析_爬虫爬取司法案例小番在这里这里涉及了一些反爬手段与方法,老铁们赶紧拿起小板凳开始听了哦爬取思路:打开一个番剧,找到播放页面,开始F12检查元素发现直接跳回首页了,这就没法用浏览器自带的抓包了。可以使用抓包工具fiddle进行抓包。先不急着抓包,先看看播放页的源代码view-source:www.zzzfun.com/vod_play_id_2029_sid_1_nid_1.html可以得到每一话的链接,那么还少了视频链接,网页源代码里面没有,只能抓包了。可以发现debug调试时跳转的代码,在右下角窗口

    2022年8月23日
    8
  • RNN-bptt简单推导「建议收藏」

    RNN-bptt简单推导「建议收藏」摘要:在前面的文章里面,RNN训练与BP算法,我们提到了RNN的训练算法。但是回头看的时候在时间的维度上没有做处理,所以整个推导可能存在一点问题。那么,在这篇文章里面,我们将介绍bptt(BackPropagationThroughTime)算法如在训练RNN。关于bptt这里首先解释一下所谓的bptt,bptt的思路其实很简单,就是把整个RNN按时间的维度展

    2022年6月23日
    44
  • 漫画自动下载工具。

    漫画自动下载工具。

    2021年9月17日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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