这是我写的一个写log的函数,并且采用了
CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate|CFile::shareDeny
模式,然后我用多线程,或者多进程写log 文件,结果出现文件共享违例异常。
代码如下,为什么会这样呢?谢谢。
操作系统:win2k,MFC编写。vc++6.0
BOOL CEx_sharewriteDlg::WriteOperationLog(CString strMessage)
{
BOOL bReturn = false;
CFile *pFile = new CFile();
CTime tTime = CTime::GetCurrentTime();
CString strTime = "";
strTime.Format("%d-%d-%d %d:%d:%d",tTime.GetYear(),tTime.GetMonth(),tTime.GetDay(),tTime.GetHour(),tTime.GetMinute(),tTime.GetSecond()); 
CString strFilePathName = "";
CString strFileName = "";
CString strPath("");
strFileName.Format("%d-%d-%d.log",tTime.GetYear(),tTime.GetMonth(),tTime.GetDay()); 


TCHAR tDirectory[255];
GetCurrentDirectory(255,tDirectory);
CString strCurrentPath=tDirectory; strPath=strCurrentPath + "\\log";
strFilePathName = strCurrentPath + "\\log\\" + strFileName;
if(_access(strPath,0)==-1)
{
mkdir(strPath);
}
try
{
CFileException cfe;
if(!pFile->Open(strFilePathName,CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate|CFile::shareDenyNone,&cfe))
{
cfe.ReportError();
delete pFile;
}
else
{
pFile->SeekToEnd(); 
strMessage = strTime + "  " + strMessage + "\r\n";
pFile->Write(strMessage.GetBuffer(0),strMessage.GetLength()); 
}
pFile->Close(); 
}
catch(CFileException* cfe1)
{
cfe1->ReportError();
pFile->Close(); }
catch(CException* ce)
{
ce->ReportError();
}
delete pFile;
return bReturn;
}