[英]Using std:fstream how to deny access (read and write) to the file
如何拒绝访问使用fstream打开的文件? 我想用fstream读取/写入文件时无法访问该文件吗?
您无法使用标准fstream做到这一点,必须使用特定于平台的功能。
在Windows上,可以使用CreateFile()或LockFileEx() 。 在Linux上,有flock() , lockf()和fcntl() (如先前的注释者所述)。
如果您使用的是MSVC,则可以将第三个参数传递给fstream的构造函数。 请参阅Visual Studio 6或更高版本的文档。 当然,它不能与其他编译器和平台一起使用。
您为什么仍要锁定其他人? 可能有更好的解决方案...
扩展Casebash的评论:
要在Windows中打开文件以使其他进程无法写入该文件,请使用
file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR);
_SH_DENYRW将同时拒绝读写访问
在本机C ++中无法实现此目的,因为它将高度依赖于平台。 在Linux / UNIX上,可以使用flock
或fcntl
进行此操作。 我不太确定如何在Windows上执行此操作。
在Windows上,您似乎必须将一些标志传递给CreatFile
或使用LockFileEx
(允许字节范围锁定)。
请注意,所有这些方法都适用于基础OS文件描述符/句柄,而不适用于fstream
。 您将需要使用Posix或Windows API从文件中读取/写入文件,或将文件描述符/句柄包装在fstream
。 这又取决于平台。 我敢肯定有一种方法可以做到,但是我不记得它在我头上了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.