在我目前的工作中,我们有几个线程同时运行, 通过其中一个线程,我们打开了一个文件:
std::ofstream fs;
fs.open(filename.c_str(), std::ofstream::out);
if( fs.is_open() ){
// do some file operation and write
fs.close();
}
而单独的线程也访问相同的文件:
HANDLE handle = CreateFileW(filename.c_str(), GENERIC_READ,0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
它失败并给出错误ERROR_SHARING_VIOLATION。
我知道,我们可以使用同步机制来克服这个问题,
但是我们可以在打开文件时使用文件共享机制来处理它吗,因为一个线程使用流 API 打开文件,而另一个线程使用 createFile。
任何输入都是可观的。
您的CreateFile()
调用将dwShareMode
参数设置为 0,因此它正在尝试打开文件进行独占访问,如果文件已打开,这将失败。
您需要指定与ofstream
打开文件的方式兼容的共享权限,例如:
HANDLE handle = CreateFileW(filename.c_str(), GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);