7. QFile读写文件的基本操作「建议收藏」(官方中文网站)
生活随笔
收集整理的這篇文章主要介紹了
7. QFile读写文件的基本操作「建议收藏」(官方中文网站)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 小文件文件的讀寫
1.1 讀取文件中所有的數(shù)據(jù)
QFile file(fileName); // fileName文件的路徑
if(file.open(QIODevice::ReadOnly)) // 以讀寫的方式打開文件
return ;
QByteArray data = file.readAll(); //方式1. 將文件的數(shù)據(jù)全部讀取出來(lái)
int fileSize = file.size(); // 獲取文件的長(zhǎng)度(單位:字節(jié))
data = file.read(fileSize); // 方式2. 將文件的所有數(shù)據(jù)讀取出來(lái)
// 從指定的位置開始讀取
file.seek(100) // 這是設(shè)置從100的位置讀取
data = file.read(1000) // 從100的位置讀取1000個(gè)字節(jié)
file.close(); // 使用完畢把文件關(guān)閉
1.2 一行一行的讀取文件的數(shù)據(jù)
QFile file(fileName); // fileName文件的路徑
if(file.open(QIODevice::ReadOnly)) // 以讀的方式打開文件
return ;
while(!file.atEnd()) // 判斷文件是否結(jié)束
{
// 每讀取一行數(shù)據(jù),游標(biāo)seek會(huì)自動(dòng)往下跳,所以當(dāng)seek到達(dá)末尾是atEnd()返回true
QByteArray data = file.readLine();
}
file.close();
1.3 將數(shù)據(jù)寫入文件中
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 通過(guò)內(nèi)存映射讀寫文件
uchar *QFileDevice::map(qint64 offset, qint64 size, MemoryMapFlags flags = NoOptions)
- 從offset開始將文件大小字節(jié)映射到內(nèi)存中。為了使映射成功,應(yīng)該打開一個(gè)文件,但在映射內(nèi)存之后,文件不需要保持打開狀態(tài)。當(dāng)QFile被銷毀或使用此對(duì)象打開一個(gè)新文件時(shí),任何未被取消映射的映射將自動(dòng)取消映射。
- 映射將具有與文件相同的打開模式(讀和/或?qū)?,除非使用MapPrivateOption,在這種情況下,總是可以寫入映射的內(nèi)存。
- 返回一個(gè)指向內(nèi)存的指針,如果有錯(cuò)誤則返回0。
QFile file(fileName); // fileName文件的路徑
if(file.open(QIODevice::WriteOnly)) // 以寫的方式打開文件
return ;
uchar* pfile = file.map(0, file.size()); // 返回一個(gè)指向內(nèi)存的指針,如果有錯(cuò)誤則返回0
if(pfile)
{
// do work
// memcpy(pfile,data.data(),size); // 寫入數(shù)據(jù)
// memcpy(data.data(),pfile,size); // 讀取數(shù)據(jù)
file.unmaps(pfile); // 取消映射 其實(shí)QFile對(duì)象被摧毀或者打開一個(gè)新的文件會(huì)自動(dòng)取消映射
}
file.close();
2. 大文件的讀寫
在進(jìn)行大文件讀寫是采用分段讀寫的思想,將大文件所有拆成一塊一塊的讀寫。
QFile file(fileName); // fileName文件的路徑
if(file.open(QIODevice::WriteOnly)) // 以寫的方式打開文件
return ;
qint64 fileSize = file.size(); // 文件的長(zhǎng)度
int readSize = 1024*1024 ; // 每一次讀取的數(shù)據(jù)長(zhǎng)度,可以自由設(shè)置
// file.pos()獲取文件游標(biāo)的位置
while(!file.atEnd())
{
QByteArray data = file.read(readSize )
}
file.close();
總結(jié)
以上是生活随笔為你收集整理的7. QFile读写文件的基本操作「建议收藏」(官方中文网站)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大型开发项目中 git 工作流的最佳实践
- 下一篇: SAP Spartacus 的 git