程序一:创建文件,其他程序可以读,以下代码运行成功。const char* pTxtFileNameA = "e:\\测试\\a.txt";
HANDLE lhFile = CreateFile( pTxtFileNameA, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);
if ( INVALID_HANDLE_VALUE == lhFile )
{
printf("文件创建失败\n");
}程序二:
读程序一创建的文件const char* pTxtFileNameA = "e:\\测试\\a.txt";
hFile= CreateFile(pTxtFileNameA , GENERIC_READ, FILE_SHARE_READ , NULL, OPEN_EXISTING, NULL, NULL);
if (INVALID_HANDLE_VALUE==hFile)
{
printf("文件打开失败\n");
DWORD dwErr = GetLastError(); //错误代码为32 }问题出在哪???
我用记事本也可以访问程序一创建的文件,程序2却始获得不了句柄
32 The process cannot access the file because it is being used by another process.
创建后没有close?
hFile = CreateFile (szTmpPath,GENERIC_READ,FILE_SHARE_READ,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
lResult = HRESULT_FROM_WIN32(GetLastError());
if (HRESULT_FROM_WIN32(ERROR_SHARING_VIOLATION) == lResult)
{
lResult = S_OK;
TraceMessage ("RemoteSendMsgToAccountA: Sharing Violation, waiting before retry");
SleepEx (200, FALSE);
goto RetryOpenFile;
}
}
const char* pTxtFileNameA = "E:\\测试\\a.txt"; char szRead[1460];
ifstream f(pTxtFileNameA,ios::in);
f.getline(szRead, sizeof(szRead));
f.close();
这就可以正常读取。。
愁淫,自己搞定 了,但是还得散分
看来做共享文件读写的部分,,还得用C,不能用win32 SDK也给大家个提示吧