Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在windows中锁定文件_C++_Windows_File_Iostream - Fatal编程技术网

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
选项打开。