C++ 如何使用共享选项实现与平台无关的文件处理?

C++ 如何使用共享选项实现与平台无关的文件处理?,c++,windows,cross-platform,ifstream,c++-standard-library,C++,Windows,Cross Platform,Ifstream,C++ Standard Library,遗留代码具有: _sopen( filepath, _O_RDONLY, _SH_DENYNO); 我可以将其更改为: std::ifstream file{ filepath, std::ios::in }; 但尽管如此,上述声明所述的windows特定版本将通过VS2019构建。它为默认构造函数提供第三个参数,如下所示(ios\u base::\u Openprotis\u SH\u DENYNO): < P>是否有C++标准的方法支持所有平台上的共享选项?如果未另行指定,则为C运行时

遗留代码具有:

 _sopen( filepath, _O_RDONLY, _SH_DENYNO);
我可以将其更改为:

std::ifstream file{ filepath, std::ios::in };
但尽管如此,上述声明所述的windows特定版本将通过VS2019构建。它为默认构造函数提供第三个参数,如下所示(
ios\u base::\u Openprot
is
\u SH\u DENYNO
):


< P>是否有C++标准的方法支持所有平台上的共享选项<代码>?如果未另行指定,则为C运行时使用的默认值。C运行时仅支持临时(关闭时删除)文件的WinAPI删除访问共享。访问共享与Windows中的进程无关。另一方面,实际的文件锁定是针对特定进程和文件对象组合的字节范围锁定,它与
CreateFileW
DeleteFileW
调用的访问共享无关。如果共享删除访问权限,则可以删除带有字节范围锁的文件。@ErykSun
\u SH_DENYNO
它在向其他进程打开文件以访问同一文件时提供了灵活性。字节范围的锁定在这里是完全不同的事情。我的评论的上下文是Ted的评论,其中提到POSIX文件锁定,这是每个进程的。Windows中的等效项是字节范围锁定,这也是每个进程的锁定,实际上,字节范围可以是从文件的开头到超出当前文件大小的任意大小,因此实际上可以是整个文件。我已经解释了
\u SH_DENYNO
和WinAPI文件访问共享(读、写、删除共享)之间的关系,它与进程根本没有关系。对于打开的文件对象,访问共享严格在文件系统级别进行。
explicit basic_ifstream(
    const char* _Filename,
    ios_base::openmode _Mode = ios_base::in,
    int _Prot = (int)ios_base::_Openprot);