前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >7. QFile读写文件的基本操作「建议收藏」

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

作者头像
全栈程序员站长
发布2022-08-22 10:10:30
发布2022-08-22 10:10:30
3.9K00
代码可运行
举报
运行总次数:0
代码可运行

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

1. 小文件文件的读写

1.1 读取文件中所有的数据

代码语言:javascript
代码运行次数:0
运行
复制
	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 一行一行的读取文件的数据

代码语言:javascript
代码运行次数:0
运行
复制
	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 将数据写入文件中

代码语言:javascript
代码运行次数:0
运行
复制
	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 通过内存映射读写文件

代码语言:javascript
代码运行次数:0
运行
复制
uchar *QFileDevice::map(qint64 offset, qint64 size, MemoryMapFlags flags = NoOptions)
  1. 从offset开始将文件大小字节映射到内存中。为了使映射成功,应该打开一个文件,但在映射内存之后,文件不需要保持打开状态。当QFile被销毁或使用此对象打开一个新文件时,任何未被取消映射的映射将自动取消映射。
  2. 映射将具有与文件相同的打开模式(读和/或写),除非使用MapPrivateOption,在这种情况下,总是可以写入映射的内存。
  3. 返回一个指向内存的指针,如果有错误则返回0。
代码语言:javascript
代码运行次数: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. 大文件的读写

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

代码语言:javascript
代码运行次数:0
运行
复制
	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.cn/136733.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月4,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 小文件文件的读写
    • 1.1 读取文件中所有的数据
    • 1.2 一行一行的读取文件的数据
    • 1.3 将数据写入文件中
    • 1.4 通过内存映射读写文件
  • 2. 大文件的读写
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档