C++ 在windows中锁定文件
我正在编写一些旧代码,它打开一个文件并向文件中添加二进制数据:C++ 在windows中锁定文件,c++,windows,file,iostream,C++,Windows,File,Iostream,我正在编写一些旧代码,它打开一个文件并向文件中添加二进制数据: std::ifstream mInFile; #ifdef WINDOWS miWindowsFileHandle = _sopen(filename.c_str(), O_RDONLY , SH_DENYWR, S_IREAD); #endif mInFile.open(filename.c_str(), std::ios_base::binary); 出于某种原因,代码会打开
std::ifstream mInFile;
#ifdef WINDOWS
miWindowsFileHandle = _sopen(filename.c_str(), O_RDONLY , SH_DENYWR, S_IREAD);
#endif
mInFile.open(filename.c_str(), std::ios_base::binary);
出于某种原因,代码会打开文件两次。这是因为_sopen用于在windows中锁定文件吗
如果是这样,为什么std::ifstream::open不锁定文件
有没有办法检查windows文件句柄是否已关闭?它会打开两次,因为第一个文件句柄会打开它并将其锁定。然后,fstream再次打开它(与前面语句的意图有些矛盾)
关于如何锁定文件,.这样我就可以直接进入mInFile.open(),然后使用LockFileEx。这将避免我尝试关闭两个文件句柄。也许。我认为,
LockFileEx
需要一个文件句柄,你可以通过操作系统特定的函数获得这个句柄。就像前面提到的另一个问题一样,您必须在一定程度上重写fstream。无需使用LockFileEx
,因为它使用的文件句柄已经可以通过file\u SHARE\u READ
选项打开。