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)
上一篇 2022年6月11日 下午6:36
下一篇 2022年6月11日 下午6:36


相关推荐

  • 什么是SSL协议,SSL协议是什么意思?「建议收藏」

    什么是SSL协议,SSL协议是什么意思?「建议收藏」转载自品略图书馆http://www.pinlue.com/article/2020/03/2322/5910049346926.html什么是SSL协议?SSL协议是一种安全传输协议,SSL是SecureSocketLayer的缩写,即安全套接层协议。该协议最初由Netscape企业发展而来,目前已经成为互联网上用来鉴别网站和网页浏览者的身份,以及在浏览器使用者及网页服务器之间…

    2022年5月7日
    55
  • pycahrm激活码【在线破解激活】

    pycahrm激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    50
  • LaTeX伪代码写法总结

    LaTeX伪代码写法总结1.伪代码所用包一般会接触到的包有algorithm、algorithmic、algorithmicx、algorithm2e这四种包。algorithm一般用于给伪代码提供一个浮动体环境,防止其换页或其他因素导致的内容中断,从而跨页显示。algorithmic则用于编辑伪代码的内容,一些for、while、if等语句通过该包中的命令进行编写。algorithmicx则可以看作algorithmic的升级版,参考资料…

    2025年6月10日
    6
  • WIN32 API获取窗口句柄

    WIN32 API获取窗口句柄WIN32API获取窗口句柄2008-08-1305:28P.M. 关于如何获取窗口句柄,以及有哪些函数可供使用的简单讨论!首先罗列出一些获取句柄的win32api函数,然后简单说说他们的用途!最后说说是怎么理解和应用的。可用的win32api函数: 1.HWNDFindWindow(LPCTSTRlpClassName,L

    2022年7月21日
    15
  • 解决项目中java heap space的问题[通俗易懂]

    解决项目中java heap space的问题[通俗易懂]起因 17年的一个项目出了OOM(javaheapspace)问题,眼下有个问题:法院项目,不能外网,一连接外网高院会直接定位到计算机,发出警报(档案的机密性啊)不能远程,那只能视频教他们怎么做了,全程和一个文员说代码,真的很累==! 过程 这个过程对一个不太了解内存的问题的开发无疑是艰难的,搜了一下,知道了是内存溢出导致的,于是着手解决 网上大多数都说调整运行…

    2022年7月8日
    25
  • 比和比例的联系和区别

    比和比例的联系和区别比和比例一直是学数学容易弄混的几大问题之一,其实它们之间的问题完全可以用一句话概括:比,等同于算式中等号左边的式子,是式子的一种(如:a:b);比例,由至少两个称为比的式子由等号连接而成,且这两个比的比值是相同(如:a:b=c:d)。所以,比和比例的联系就可以说成是:比是比例的一部分;而比例是由至少两个比值相等的比组合而成的.比和比例的区别:区别区别1:意义、项数、各部

    2022年5月14日
    50

发表回复

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

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