为什么对同一个共享文件进行,调用
HANDLE hFile = ::CreateFile(chPath,     //创建文件的名称。
GENERIC_WRITE|GENERIC_READ,       // 写和读文件。
FILE_SHARE_WRITE,                 // 不共享读写。
NULL,                   // 缺省安全属性。
OPEN_EXISTING,          // 如果文件存在,也创建。
FILE_ATTRIBUTE_NORMAL, // 一般的文件。       
NULL);                 // 模板文件为空。
然后::WriteFile执行成功!但是调用
cf.Open(chPath,CFile::modeWrite|CFile::modeRead,NULL);
然后CFile::write执行执行错误??

解决方案 »

  1.   

    把错误贴出来看看
    CreateFile是Windows系统的API函数.CFile是VC封装的操作文件的类.
      

  2.   

    你是不是先CreateFile,然后用CFile打开写?
      

  3.   

    CFile::modeCreate | CFile::modeWrite
      

  4.   

    贴一段CFile::open的源代码
    // map read/write mode
    ASSERT((modeRead|modeWrite|modeReadWrite) == 3);
    DWORD dwAccess = 0;
    switch (nOpenFlags & 3)
    {
    case modeRead:
    dwAccess = GENERIC_READ;
    break;
    case modeWrite:
    dwAccess = GENERIC_WRITE;
    break;
    case modeReadWrite:
    dwAccess = GENERIC_READ | GENERIC_WRITE;
    break;
    default:
    ASSERT(FALSE);  // invalid share mode
    } // map share mode
    DWORD dwShareMode = 0;
    switch (nOpenFlags & 0x70)    // map compatibility mode to exclusive
    {
    default:
    ASSERT(FALSE);  // invalid share mode?
    case shareCompat:
    case shareExclusive:
    dwShareMode = 0;
    break;
    case shareDenyWrite:
    dwShareMode = FILE_SHARE_READ;
    break;
    case shareDenyRead:
    dwShareMode = FILE_SHARE_WRITE;
    break;
    case shareDenyNone:
    dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ;
    break;
    }
    可以看出来对应的代码应该是
    cf.Open(chPath,CFile::modeReadWrite|CFile::shareDenyRead,NULL); 
      

  5.   

    你既然已经是以共享方式打开了,就不能在另外打开的时候,不要忘记带上共享的参数。
    cf.Open(chPath,CFile::modeReadWrite|CFile::shareDenyNone,NULL); 最正确的就是打开方式都是开放的统一的权限,只读就都只读,只写就都只写,可读写就得全部可读写