1

我正在处理一些遗留代码,它打开一个文件并将二进制数据添加到文件中:

    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 文件句柄是否已经关闭?

4

1 回答 1

2

它打开了两次,因为第一次打开它并锁定它。然后 fstream 再次打开它(与前面语句的意图有些矛盾。)

关于如何锁定文件,请查看这个问题

于 2009-08-11T06:00:09.957 回答