CFile文件操作错误 filecore.cpp line88

项目里边要把语音数据动态写入文件,我用CFile这个类。

发现总是报错 filecore.cpp line88,转到filecore.cpp line88里边一看(在 VC98/MFC/SRC目录底下)

第88行是:

if (m_hFile != (UINT)hFileNull && m_bCloseOnDelete)

这是CFile的析构里面的一条语句。

 

CFile::~CFile()
{
 if (m_hFile != (UINT)hFileNull && m_bCloseOnDelete)
  Close();
}

 

m_hFile != (UINT)hFileNull && m_bCloseOnDelete  -->文件句柄不为空并且指示在关闭文件时删除CFile对象的前提下

关闭文件。

 

 

出现这个问题,是因为文件句柄为空吗?

相关代码如下,

writeHead(CString savePath)

{

    CFile m_file;
   
    if (!m_file.Open( (LPCTSTR)savePath,
           CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive))
   {
       return;
   }

 

   // 文件写入

   //......

   //.......

 

   m_file.Flush();

   m_file.Close();

}

 

saveWav(CString savePath)

{

    CFile m_file;
   
    if (!m_file.Open( (LPCTSTR)savePath,
           CFile::modeReadWrite|CFile::shareExclusive))
   {
       return;
   }

 

   //文件读写

   //......

   //......

  

   m_file.Flush();


   m_file.Close();

 

}// end of saveWav()

 

 

我先调用writehead()

再调用saveWav(),出现上诉错误。

 

//

 

之后将代码分别改成如下:

 

writeHead(CString savePath)

{

    CFile m_file;
   
    if (!m_file.Open( (LPCTSTR)savePath,
           CFile::modeCreate|CFile::modeReadWrite)) // ------>去掉CFile::shareExclusive

   {
       return;
   }

 

   // 文件写入

   //......

   //.......

 

   m_file.Flush();

   m_file.Close();

}

 

saveWav(CString savePath)

{

    CFile m_file;
   
    if (!m_file.Open( (LPCTSTR)savePath,
           CFile::modeReadWrite)) // ------>去掉CFile::shareExclusive
   {
       return;
   }

 

   //文件读写

   //......

   //......

  

   m_file.Flush();


   if (m_file.m_hFile!=CFile::hFileNull) // ------->添加文件句柄是否为空判断,确认文件打开后再关闭
    {

        m_file.Close();

    }

}// end of saveWav()

 

 

如此一改后,问题解决。

 

不知道问题的解决是因为

1.取消独占模式打开文件;???

还是

2.加了文件句柄判断。???

 

今天偷个懒,明天确认一下是1还是2的问题。。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值