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

C++ 使用std:fstream如何拒绝对文件的访问(读写),c++,C++,如何拒绝访问使用fstream打开的文件?我想用FSRESH来访问文件时不能访问文件, < P>在本地C++中没有办法做到这一点,因为它将是高度依赖于平台的。在Linux/UNIX上,可以使用或执行此操作。我真的不知道如何在Windows上做 在windows上,似乎必须将一些标志传递给或使用(这允许字节范围锁定) 请注意,所有这些方法都适用于底层OS文件描述符/句柄,而不是fstreams。您需要使用Posix或Windows API来读取/写入文件,或者将文件描述符/句柄包装在fstream

如何拒绝访问使用fstream打开的文件?我想用FSRESH来访问文件时不能访问文件,

< P>在本地C++中没有办法做到这一点,因为它将是高度依赖于平台的。在Linux/UNIX上,可以使用或执行此操作。我真的不知道如何在Windows上做

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


请注意,所有这些方法都适用于底层OS文件描述符/句柄,而不是
fstream
s。您需要使用Posix或Windows API来读取/写入文件,或者将文件描述符/句柄包装在
fstream
中。这又取决于平台。我肯定有办法做到这一点,但我记不得了。

标准的fstream无法做到这一点,必须使用特定于平台的功能

在Windows上,您可以使用或。在Linux上,有和(正如前面的评论员所说)

如果您使用的是MSVC,那么可以将第三个参数传递给fstream的构造函数。有关或的详细信息,请参阅文档。当然,它不适用于其他编译器和平台

你为什么要把别人关在外面?可能有更好的解决方案…

扩展Casebash的评论:

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

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

_SH_DENYRW将拒绝读写访问

我需要从文件中读取内容并根据内容更改行。我想避免在读写文件时对文件进行更改(拥有最新数据&不要重写)我使用fstream实现了它,我需要将整个代码更改为使用句柄和缓冲区(readfile),还是可以从fstream获得句柄?我在readfile和writefile方面遇到了麻烦,因为我需要逐行读取和写入。(对于fstream,我使用getline函数.fstream fs(path),而(!file.eof())使用getline(fs,line);执行一些操作…fs.write(str,str.size());fs.clear();fs.close();您想保护您的文件不受程序的其他实例或其他程序的影响吗?首先,一个简单的解决方案是使用锁定文件/目录-大多数程序都是这样做的。其次,我从未见过这种情况发生-如果您真的需要,请参阅我的答案。提供了有关使用
fstream
的详细信息我知道这一点s已经10年了,但是如何锁定一个比任何其他也使用特定于平台的系统调用的文件操作更依赖于平台的文件呢?