使用std:fstream如何拒绝对文件的访问(读写)

时间:2009-05-08 13:45:10

标签: c++

如何拒绝访问我使用fstream打开的文件?我想在使用fstream读取/写入文件时无法访问该文件?

3 个答案:

答案 0 :(得分:13)

你无法使用标准的fstream,你必须使用平台特定的功能。

在Windows上,您可以使用CreateFile()LockFileEx()。在Linux上,有flock()lockf()fcntl()(正如之前的评论者所说)。

如果您使用的是MSVC,则可以将第三个参数传递给fstream的构造函数。请参阅Visual Studio 6newer versions的文档。当然,它不适用于其他编译器和平台。

为什么你想锁定其他人呢?可能有更好的解决方案......

答案 1 :(得分:5)

扩展Casebash的评论:

要在Windows中打开文件以便其他进程无法写入,请使用

file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR);

_SH_DENYRW将拒绝读写访问

答案 2 :(得分:3)

在本机C ++中无法做到这一点,因为它将高度依赖于平台。在Linux / UNIX上,您可以使用flockfcntl执行此操作。我不确定如何在Windows上执行此操作。

在Windows上,看起来你必须将一些标志传递给CreatFile或使用LockFileEx(允许字节范围锁定)。

请注意,所有这些方法都适用于底层操作系统文件描述符/句柄,而不适用于fstream。您将需要使用Posix或Windows API从文件读取/写入,或将文件描述符/句柄包装在fstream中。这又是平台依赖的。我确信有办法做到这一点,但我不记得它在我的头顶。