7. QFile读写文件的基本操作「建议收藏」

7. QFile读写文件的基本操作「建议收藏」QFile的基本读写操作

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

1. 小文件文件的读写

1.1 读取文件中所有的数据

	QFile file(fileName); // fileName文件的路径
    if(file.open(QIODevice::ReadOnly))  // 以读写的方式打开文件
    	return ;	
    QByteArray data = file.readAll();  //方式1. 将文件的数据全部读取出来
    int fileSize = file.size();   	   // 获取文件的长度(单位:字节)
    data = file.read(fileSize);        // 方式2. 将文件的所有数据读取出来
    // 从指定的位置开始读取
	file.seek(100) // 这是设置从100的位置读取
	data = file.read(1000) // 从100的位置读取1000个字节
    file.close();                      // 使用完毕把文件关闭

1.2 一行一行的读取文件的数据

	QFile file(fileName); // fileName文件的路径
    if(file.open(QIODevice::ReadOnly))  // 以读的方式打开文件
    	return ;
    while(!file.atEnd()) // 判断文件是否结束
    { 
   
        // 每读取一行数据,游标seek会自动往下跳,所以当seek到达末尾是atEnd()返回true
    	QByteArray data =  file.readLine();  
    }
    file.close();

1.3 将数据写入文件中

	QFile file(fileName); // fileName文件的路径
    if(file.open(QIODevice::WriteOnly))  // 以写的方式打开文件
    	return ;
   QByteArray data ;
   data.resize(10);
   memset(data.data(),0x00,data.size());
   file.write(data);
   file.close();

1.4 通过内存映射读写文件

uchar *QFileDevice::map(qint64 offset, qint64 size, MemoryMapFlags flags = NoOptions)
  1. 从offset开始将文件大小字节映射到内存中。为了使映射成功,应该打开一个文件,但在映射内存之后,文件不需要保持打开状态。当QFile被销毁或使用此对象打开一个新文件时,任何未被取消映射的映射将自动取消映射。
  2. 映射将具有与文件相同的打开模式(读和/或写),除非使用MapPrivateOption,在这种情况下,总是可以写入映射的内存。
  3. 返回一个指向内存的指针,如果有错误则返回0。
	QFile file(fileName); // fileName文件的路径
    if(file.open(QIODevice::WriteOnly))  // 以写的方式打开文件
    	return ;
    uchar* pfile = file.map(0, file.size());  // 返回一个指向内存的指针,如果有错误则返回0
    if(pfile)
    { 
   
    	// do work 
    	// memcpy(pfile,data.data(),size); // 写入数据
    	// memcpy(data.data(),pfile,size); // 读取数据
    	file.unmaps(pfile); // 取消映射 其实QFile对象被摧毁或者打开一个新的文件会自动取消映射
	}
	file.close();

2. 大文件的读写

在进行大文件读写是采用分段读写的思想,将大文件所有拆成一块一块的读写。

	QFile file(fileName); // fileName文件的路径
    if(file.open(QIODevice::WriteOnly))  // 以写的方式打开文件
    	return ;
    qint64 fileSize = file.size(); // 文件的长度
    int readSize = 1024*1024 ;  // 每一次读取的数据长度,可以自由设置
    // file.pos()获取文件游标的位置
    while(!file.atEnd())  
    { 
   
    	QByteArray data = file.read(readSize )
    	
    } 
    file.close();
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • Idea激活码最新教程2024.3.3版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2024.3.3版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2024 3 3 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2024 3 3 成功激活

    2025年5月31日
    0
  • Linux 安装 rabbitmq 3.7.16 详细教程[通俗易懂]

    前提:下载依赖,安装rabbitmq需要下载以下依赖,这里可以提前下载上。依次执行以下命令安装依赖类库:#yum-yinstallmakegccgcc-c++kernel-develm4ncurses-developenssl-devel#yuminstallxmlto-y执行成功后如下(complete)一、安装erlang(最新版本22….

    2022年4月17日
    37
  • 一文搞懂SpringBoot自动配置原理「建议收藏」

    一文搞懂SpringBoot自动配置原理「建议收藏」阅读收获????????理解SpringBoot自动配置原理一、SpringBoot是什么SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。二、SpringBoot的特点提供了固定的配置来简化配置,即约定大于配置 尽可能地

    2022年8月21日
    5
  • 桌面太单调?一起用Python做个自定义动画挂件,好玩又有趣!

    桌面太单调?一起用Python做个自定义动画挂件,好玩又有趣!前言前段时间,写了篇博客关于Python自制一款炫酷音乐播放器。有粉丝问我,音乐播放器为什么要用PyQt5,效果是不是比Tkinter赞?PyQt5真的可以实现这些炫酷的UI画面吗?之前没接触过PyQt5,能不能多分享一些这方面的开发案例?今天就带大家,一起用Python的PyQt5开发一个有趣的自定义桌面动画挂件,看看实现的动画挂件效果!下面,我们开始介绍这个自定义桌面动画挂件的制作过程。一、核心功能设计总体来说,我们需要实现将自己喜欢的动态图gif或者视频转成一个桌面动画挂件,并且可以通过鼠

    2022年4月25日
    54
  • Layui treeTable相关

    Layui treeTable相关layui官网是没有treeTable这个功能的,需要下载额外的插件实现,幸运的是有符合layui风格的treeTable插件,此篇围绕树状表格讲述。treeTable官网指路:https://gitee.com/whvse/treetable-lay/wikis/pages下载有Gitee账号官网TreeTable资源下载路径:https://gitee.com/whvse/treetable-lay无Gitee账号导入treeTable的导入方式和layui其他组件一样,都是通过layui

    2022年5月6日
    51
  • pytest的使用_新代子程序重复调用

    pytest的使用_新代子程序重复调用Pytest执行用例规则Pytest在命令行中支持多种方式来运行和选择测试用例1.对某个目录下所有的用例pytest2.对模块中进行测试pytesttest_mod.py3.对文件夹进行

    2022年7月29日
    1

发表回复

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

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