我们在用程序打开一个文件时,可能会遇到共享违例,比如将一个CSV文件打开,你再在程序中去read,那么程序就会提示共享违例,
解决方法是利用CreateFile来判断这个文件是否被被其他进程以独占的方式占用了,直接贴代码吧:
CFileDialog openFileDlg(TRUE, _T(".csv"), NULL, 4|2, _T("CSV File(*.csv)|*.csv||"), this); if (openFileDlg.DoModal() == IDOK) { CString szPath = openFileDlg.GetPathName() ; bool Result; HANDLE Handle = CreateFile(szPath, GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE == Handle) { AfxMessageBox(_T("文件已被占用,请先关闭")); return ; } CloseHandle(Handle) ;//不关闭的话文件就被上面的createfile占用了 CFile file; file.Open(szPath,CFile::modeRead); LPSTR pBuf; DWORD dwFileLen; dwFileLen=file.GetLength(); pBuf=new char[dwFileLen+2]; pBuf[dwFileLen]=0; pBuf[dwFileLen + 1] = 0; file.Read(pBuf,dwFileLen); }