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


相关推荐

  • python获取软件窗口句柄_python获取窗口句柄并将指定应用置顶

    python获取软件窗口句柄_python获取窗口句柄并将指定应用置顶defget_all_hwnd(hwnd,mouse):if(win32gui.IsWindow(hwnd)andwin32gui.IsWindowEnabled(hwnd)andwin32gui.IsWindowVisible(hwnd)):AC_cycle_uefi.hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)})defs…

    2022年7月21日
    19
  • Python关键点常识

    Python关键点常识

    2021年9月18日
    32
  • griddata方法使用插值方法

    griddata方法使用插值方法’linear’Linearinterpolation(default)双线性插值’cubic’Cubicinterpolation双三次插值’natural’Naturalneighborinterpolation 自然邻近插值’nearest’Nearestneighborinterpolation最近邻近插值’v4’MATLAB®4grid

    2022年5月26日
    41
  • mysql语句和sql语句的区别_oracle和sqlserver的语法区别

    mysql语句和sql语句的区别_oracle和sqlserver的语法区别sql和mysql语法的区别有:mysql支持enum和set类型,sql不支持,mysql需要为表指定存储类型,mysqlL中text字段类型不允许有默认值,sql允许有等等方面都存在差异MySQL与SQLServer的语法区别1、MySQL支持enum,和set类型,SQLServer不支持2、MySQL不支持nchar,nvarchar,ntext类型3、MySQL的递增语句是AUTO_I…

    2022年10月2日
    2
  • KindEditor配置和使用

    KindEditor配置和使用|字号订阅很长时间没有写学习心得了,整理了一下思路,简单写一下吧。1下载kindeditor包,目前最新版本是kindeditor-3.5.5。下载地址:http://www.kindsoft.net/2.解压之后,解压目录kindeditor如下图所示。3.开始瘦身,其实调用kindeditor并不需要那么多文件,只要保留目录:…

    2022年10月12日
    2
  • 局部性原理的理解

    局部性原理的理解局部性原理的理解杜逸闲本文首先介绍了局部性原理的定义 然后列举了一些局部性原理的应用 接着具体讨论了局部性原理在 pagecoloring 中的应用 最后分析了局部性原理的本质 什么是局部性原理在计算机学科的概念中 局部性原理是一个常用的术语 指处理器在访问某些数据时短时间内存在重复访问 某些数据或者位置访问的概率极大 大多数时间只访问局部的数据 主要可以分为时间局部性和空间局部性两种 时间局部性如果一个数据正在被访问 那么在近期它很可能还会被再次访问 任何编写过程序的人都

    2025年10月17日
    3

发表回复

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

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