如何拒绝访问我使用fstream打开的文件?我想在使用fstream读取/写入文件时无法访问该文件?
答案 0 :(得分:13)
你无法使用标准的fstream,你必须使用平台特定的功能。
在Windows上,您可以使用CreateFile()或LockFileEx()。在Linux上,有flock(),lockf()和fcntl()(正如之前的评论者所说)。
如果您使用的是MSVC,则可以将第三个参数传递给fstream的构造函数。请参阅Visual Studio 6或newer versions的文档。当然,它不适用于其他编译器和平台。
为什么你想锁定其他人呢?可能有更好的解决方案......
答案 1 :(得分:5)
扩展Casebash的评论:
要在Windows中打开文件以便其他进程无法写入,请使用
file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR);
_SH_DENYRW将拒绝读写访问
答案 2 :(得分:3)
在本机C ++中无法做到这一点,因为它将高度依赖于平台。在Linux / UNIX上,您可以使用flock
或fcntl
执行此操作。我不确定如何在Windows上执行此操作。
在Windows上,看起来你必须将一些标志传递给CreatFile
或使用LockFileEx
(允许字节范围锁定)。
请注意,所有这些方法都适用于底层操作系统文件描述符/句柄,而不适用于fstream
。您将需要使用Posix或Windows API从文件读取/写入,或将文件描述符/句柄包装在fstream
中。这又是平台依赖的。我确信有办法做到这一点,但我不记得它在我的头顶。