为什么对同一个共享文件进行,调用
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执行执行错误??
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执行执行错误??
CreateFile是Windows系统的API函数.CFile是VC封装的操作文件的类.
// 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);
cf.Open(chPath,CFile::modeReadWrite|CFile::shareDenyNone,NULL); 最正确的就是打开方式都是开放的统一的权限,只读就都只读,只写就都只写,可读写就得全部可读写