sinat_31675145 2016-03-16 07:01 采纳率: 0%
浏览 1999

MFC 文件写入 WriteString 引起中断。

MFC写文件时,打开写入位置文件夹,或者刷新文件夹里的内容,就会引起中断。
我的代码如下:

CString savepath("E:\测试文件夹");
CreateDirectory(savepath,NULL);

CString filename("\test.txt");
filename = savepath + filename;

CString str;
str =_T("test2016test2016test2016test2016test2016\r\n");

CStdioFile myFile;
CFileException fileException;

while(1)
{
Sleep(1);
if(!myFile.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::shareCompat|CFile::shareDenyNone),&fileException;)
{
myFile.SeekToEnd();
myFile.WriteString(str);
myFile.Close();
}
else
{
MessageBox(_T("打开文件失败"));
}
}

文件循环写入的图中,以下情况会偶尔引起中断
1,打开“测试文件夹”
2,在“测试文件夹”里按F5刷新,
3,复制test.txt文件。
4,打开test.txt文件。
当文件越来越大的时候,这样的操作引起中断更容易。
中断位置指向WriteString(str);

请问各位大神,怎么处理?哪里操作不够安全?

  • 写回答

3条回答 默认 最新

  • 忘世麒麟 2016-03-16 07:30
    关注

    你是不是逻辑错了? !myFile.Open的意思是:打开失败!此时你失败了还writeString肯定会引起中断!

     if(!myFile.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::shareCompat|CFile::shareDenyNone),&fileException;)
    {
    myFile.SeekToEnd();
    myFile.WriteString(str);
    myFile.Close();
    }
    else
    {
    MessageBox(_T("打开文件失败"));
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?