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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • efi shell的英文介绍_请问电脑开机后显示英文字母efi shell version 2.31是什么意思…

    efi shell的英文介绍_请问电脑开机后显示英文字母efi shell version 2.31是什么意思…你好你说的这种情况,一般都是由系统软件、内存、硬盘引起的。1电脑不心装上了恶意软件,或上网时产生了恶意程序,建议用360卫士、金山卫士等软件,清理垃圾,查杀恶意软件,就可能解决。实在不行,重装,还原过系统,可以解决软件引起的问题。2如果不能进入系统,可以开机后到系统选择那里按f8选起作用的最后一次正确配置和安全模式,可能可以进入系统。3点开始菜单运行输入cmd回车,在…

    2022年7月24日
  • 光棍节程序员闯关秀 writeup

    光棍节程序员闯关秀 writeup先放上题目网址→→https://1111.segmentfault.com/第1关ctrl+a~~第2关查看页面源代码,复制粘贴回车~~第3关用firebug抓包,或者火狐谷歌浏览器自带的开发者工具也可,就可以看见The-Key-Is:a87ff679a2f3e71d9181a67b7542122c把Key复制到URL上K=后面即可第4关观察密码规律,

    2022年7月17日
  • 字符串转时间格式

    字符串转时间格式importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassAAAAAAAAAA{publicstaticvoidmain(String[]args)throwsParseException{SimpleDateFormatdateFormat=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);D

    2022年5月5日
  • encoder和decoder的区别_python encode函数

    encoder和decoder的区别_python encode函数python内部的字符串一般都是Unicode编码。代码中字符串的默认编码与代码文件本身的编码是一致的。所以要做一些编码转换通常是要以Unicode作为中间编码进行转换的,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(encode)成另一种编码。decode:的作用是将其他编码的字符串转换成Unicode编码,name.decode(“GB23…

    2022年9月27日
  • 线匹配之LBD_终端匹配

    线匹配之LBD_终端匹配参考链接:1.线特征—LineMatching代码运行(五)

    2022年10月29日
  • 简述pki的体系结构_如何整理知识点

    简述pki的体系结构_如何整理知识点 

    2022年8月22日

发表回复

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

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