读写二进制文件,打开失败,共享冲突

forestfire 2011-04-07 09:12:56
【代码】
BOOL writedata2file()
{
.....
if(size > 0)
{
.......


if(1 == PathFileExists(m_temp_list)) //判断文件是否存在
{
if(MyFile.Open("aa.dat", CFile::modeReadWrite | CFile::typeBinary))
{

bEX = TRUE;
}
else
{
return FALSE;
}
}
else
{ //不存在改文件
if(MyFile.Open("aa.dat", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
{
}
else
{
return FALSE;
}
}

.......
//写数据到文件


MyFile.Close();


}

return TRUE;
}

该函数的调用是采用一个5分钟的定时器。
【问题】:当调用了很多次以后,发现跑到 “if(MyFile.Open("aa.dat", CFile::modeReadWrite | CFile::typeBinary))”的时候就调用失败了,在程序之外,打开文件,提示”共享冲突“,请问是什么问题呢?感谢各位高手不吝赐教

...全文
214 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
forestfire 2011-04-09
  • 打赏
  • 举报
回复
感谢大家的回复,发现了是在程序的其他地方有打开操作,呵呵
forestfire 2011-04-08
  • 打赏
  • 举报
回复
感谢大家的回复,我正在看问题是否会重复发生,应为只在这个程序里面操作了这个文件,我在想会不会是MyFile.close(),没有正常关闭呢?,但是会发生这种情况吗?对文件的写是一直往文件尾部添加,文件的大小有700-800M,不知道文件大小会不会引发该问题?
赵4老师 2011-04-08
  • 打赏
  • 举报
回复
用共享方式打开文件试试
还可以用OpenedFilesView软件查看文件当前正被哪个进程打开。http://www.nirsoft.net
zhlandwufei 2011-04-08
  • 打赏
  • 举报
回复
使用共享的话,要保证你起来的打开过程 都是使用共享的,要不然共享打开还是不行的
太乙 2011-04-07
  • 打赏
  • 举报
回复
是不是用户打开的最大句柄数有限制?你看看系统的设置多少?

ulimit -a
yuppy 2011-04-07
  • 打赏
  • 举报
回复
在程序之外打开有错 可能是你的 MyFile.Close(); 没正确关闭呢,或者就是还在跑..

open错误就查查权限,有没其他人在读写.
太乙 2011-04-07
  • 打赏
  • 举报
回复
看是否有别的进程打开这个文件,并且可以打印出来Open函数的返回值,看errno是多少?然后google查看详细信息

64,670

社区成员

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

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