程序一:创建文件,其他程序可以读,以下代码运行成功。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却始获得不了句柄

解决方案 »

  1.   

    ERROR_SHARING_VIOLATION:
    32 The process cannot access the file because it is being used by another process. 
    创建后没有close? 
      

  2.   

    不能CLOSE啊,,,程序一要不定期的写入数据呢可是,为什么我用记事本打开,就可以看呢
      

  3.   

    RetryOpenFile:
    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;
       }
      

  4.   

    SDK不行,只好用别的办法了,用C解决问题了,如下:
    const char* pTxtFileNameA = "E:\\测试\\a.txt"; char szRead[1460];
    ifstream f(pTxtFileNameA,ios::in);
    f.getline(szRead, sizeof(szRead));
    f.close();
    这就可以正常读取。。
    愁淫,自己搞定 了,但是还得散分
    看来做共享文件读写的部分,,还得用C,不能用win32 SDK也给大家个提示吧