7. QFile读写文件的基本操作「建议收藏」官方中文网站

1. 小文件文件的读写

1.1 读取文件中所有的数据

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

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

	QFile filefileName); // fileName文件的路径
iffile.openQIODevice::ReadOnly))  // 以读的方式打开文件
return ;
while!file.atEnd)) // 判断文件是否结束
{ 

// 每读取一行数据,游标seek会自动往下跳,所以当seek到达末尾是atEnd)返回true
QByteArray data =  file.readLine);  
}
file.close);

1.3 将数据写入文件中

	QFile filefileName); // fileName文件的路径
iffile.openQIODevice::WriteOnly))  // 以写的方式打开文件
return ;
QByteArray data ;
data.resize10);
memsetdata.data),0x00,data.size));
file.writedata);
file.close);

1.4 通过内存映射读写文件

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

// do work 
// memcpypfile,data.data),size); // 写入数据
// memcpydata.data),pfile,size); // 读取数据
file.unmapspfile); // 取消映射 其实QFile对象被摧毁或者打开一个新的文件会自动取消映射
}
file.close);

2. 大文件的读写

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

	QFile filefileName); // fileName文件的路径
iffile.openQIODevice::WriteOnly))  // 以写的方式打开文件
return ;
qint64 fileSize = file.size); // 文件的长度
int readSize = 1024*1024 ;  // 每一次读取的数据长度,可以自由设置
// file.pos)获取文件游标的位置
while!file.atEnd))  
{ 

QByteArray data = file.readreadSize )
} 
file.close);

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

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