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


相关推荐

  • SQL语法(五) 多表联合查询

    SQL语法(五) 多表联合查询前言当需要获取的数据分布在多张中,考虑使用联合查询,本章将学习两种查询方式(sql92/sql99)范例1.笛卡儿积将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积。结果的数量为所有表的数量的乘积。–SQL92方式–表名以逗号隔开实现多表查询–SQL99方式–使用crossjoin关键字2.等值连接筛选&不等…

    2022年6月12日
    26
  • Electron 入门_electron爬虫

    Electron 入门_electron爬虫前言前端开发桌面程序这个概念已经出现有一段时间了,这项技术也已经走向成熟,Github上nw和光electron的star就差不多有10w颗星了,github也衍生出了很多开源的桌面项目俨然成了一个

    2022年8月5日
    4
  • vue的实现原理怎么回答_变压吸附的原理

    vue的实现原理怎么回答_变压吸附的原理一、Vue对比其他框架原理Vue相对于React,Angular更加综合一点。AngularJS则使用了“脏值检测”。React则采用避免直接操作DOM的虚拟dom树。而Vue则采用的是&#160

    2022年8月3日
    12
  • FastAI 课程学习笔记 lesson 1:宠物图片分类

    FastAI 课程学习笔记 lesson 1:宠物图片分类文章目录代码解析神奇的”%”导入fastAI库下载解压数据集untar_data获取帮助文档help()???doc设置路径get_image_filesImageDataBunchfrom_name_regrep命令检验正则表达式pythonre检验正则表达式代码解析神奇的”%”%reload_extautoreload%autoreload2%matplotlibinli…

    2025年10月6日
    3
  • 手把手教你用UNet做医学图像分割系统

    手把手教你用UNet做医学图像分割系统兄弟们好呀,这里是肆十二,这转眼间寒假就要过完了,相信大家的毕设也要准备动手了吧,作为一名大作业区的UP主,也该蹭波热度了,之前关于图像分类和目标检测我们都出了相应的教程,所以这期内容我们搞波新的,我们用Unet来做医学图像分割。我们将会以皮肤病的数据作为示范,训练一个皮肤病分割的模型出来,用户输入图像,模型可以自动分割去皮肤病的区域和正常的区域。B站讲解视频:CSDN博客:代码地址:unet_42:基于Unet的医学影像分割系统(gitee.com)处理好的数据集和训练好的模型:更多相关的

    2022年6月15日
    23
  • IT公司速查手册、http://www.findgs.com红黑榜it

    IT公司速查手册、http://www.findgs.com红黑榜itIT公司速查手册http://www.bewww.net/http://www.seeitco.com/ http://www.findgs.com 

    2022年7月16日
    15

发表回复

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

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