繁体   English   中英

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

[英]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上,可以使用flockfcntl进行此操作。 我不太确定如何在Windows上执行此操作。

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

请注意,所有这些方法都适用于基础OS文件描述符/句柄,而不适用于fstream 您将需要使用Posix或Windows API从文件中读取/写入文件,或将文件描述符/句柄包装在fstream 这又取决于平台。 我敢肯定有一种方法可以做到,但是我不记得它在我头上了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM