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


相关推荐

  • 二进制加减法运算法则例子_php运算符

    二进制加减法运算法则例子_php运算符如果采用与十进制减法相同的方法,那么从一个较大的二进制数中减去一个较小的无符号二进制数就很容易了。示例如下:01101(十进制数13)–00111(十进制数7)———-位0上的减法非常简单:01101–00111———-0下一个位置上执行(0-1),要向左边的相邻位借1,其结果是从2中减去1:01001–00111———-10再下一位上,又要向左…

    2022年9月25日
    3
  • Git安装教程(详细教程)

    Git安装教程(详细教程)Git安装教程大家好,今天我们来学习一下怎么安装git这个软件,好好看,好好学,超详细的。第一步下载git(找到自己需要的版本)第二步下载完点击安装包进入使用许可声明界面第三步点击Next进入选择安装路径界面这里我是选择装在D盘,大家如果嫌麻烦就默认安装在C盘第四步点击Next进入选择安装组件界面上图红框内的选项是默认勾选的,建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框2是决定在所有控制台窗口中使用TrueType字体和是否每天检查Git

    2022年5月1日
    47
  • java系统高并发解决方案(转载)[通俗易懂]

    java系统高并发解决方案(转载)[通俗易懂]转载博客地址:http://blog.csdn.net/zxl333/article/details/8454319一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大

    2022年5月31日
    26
  • RT-Thread下finsh原理浅析

    RT-Thread下finsh原理浅析原文:http://www.rt-thread.org/phpBB3/viewtopic.php?f=3&t=2865一直想探寻rtt的finsh原理,最近终于下定决心跑一跑这段代码,若有不对之处还望多多指针。RT-Thread的FinshShell接口实际上是一个线程,入口在shell.c,入口函数为代码:全选voidfinsh_thread_entry(vo…

    2022年5月21日
    34
  • django 自定义user_tb程序化交易模型源码

    django 自定义user_tb程序化交易模型源码前言Django为我们提供了内置的User模型,不需要我们再额外定义用户模型,建立用户体系了。它的完整的路径是在django.contrib.auth.models.User。User模型源码分析

    2022年7月30日
    3
  • Rpc接口压测_rpc服务接口测试

    Rpc接口压测_rpc服务接口测试前言哈喽,喜欢这篇文章的话烦请点个赞哦!万分感谢(^▽^)PS:有问题可以联系我们哦vceshiren001复制“下方链接”,提升测试核心竞争力!更多技术文章分享和免费资料领取现今有比较多的rpc框架应用于实际的生产中,像比较流行的Dubbo、Motan、Thrift、Grpc等。今天作者将以最近项目中用到的grpc为例,结合jmeter来介绍下rpc压测实施步骤。学习本文前需对rpc框架、jmeter有个大致的了解,知道rpc如何用工具生成各种语言的代码。Grpc本身是支持很多种语言的,而jm

    2022年10月13日
    2

发表回复

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

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