项目里边要把语音数据动态写入文件,我用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的问题。。。