QFile.map()内存映射问题

zhuozhe0550 2017-10-19 08:04:56

QFile file("D://1.txt");
if (file.open(QIODevice::ReadWrite))
{
file.resize(DM_FILE_SIZE*2);
uchar* pfile = file.map(0, DM_FILE_SIZE);
if (pfile)
{
int iUseData = 0;
int iMoveData = 0;
for (int i=0;i<9999999999;i++)
{
std::string str = "dfywhrwkejfhnowh3jo4irj32ojmwelkrmwelkrmwer";
if (iUseData + str.size() > DM_FILE_SIZE)
{
iMoveData += iUseData;
iUseData = 0;
file.unmap(pfile);
pfile = NULL;
if (iMoveData + DM_FILE_SIZE >= file.size())
{
if (pfile)
{
file.unmap(pfile);
pfile = NULL;
}
// 此处resize大小之后,
file.resize(file.size() + DM_FILE_SIZE*2);
}
// 这个地方的到的指针就是空,,不resize的话就正常
pfile = file.map(iMoveData, DM_FILE_SIZE);
}
if (pfile)
{
memcpy(pfile, str.data(), str.size());
pfile += str.size();
iUseData += str.size();
}
}
}
}
file.close();

只要file文件resize大小之后,map得到的指针就是空,为什么?
...全文
1625 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengqiang8984 2019-10-26
  • 打赏
  • 举报
回复
你在重新map之前,重新设置一下文件名,我之前遇到跟你一样得问题了 DWORD err = GetLastError(); QString str = file.fileEngine()->errorString(); qDebug()<<str; 会打印没有权限访问 file.setFileName("D://1.txt"); file.open(QIODevice::ReadWrite); // 此处resize大小之后, file.resize(file.size() + DM_FILE_SIZE*2); 这样就好了
zhuozhe0550 2017-10-19
  • 打赏
  • 举报
回复
文件开辟8M,然后我每4M开辟内存往里写,当我判断下一个4M超过文件大小时,我就resize文件大小,但是resize之后map得到的指针就是空,为什么啊

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧