在C++中打开文件时如何设置文件权限?

zha*_*ing 2 c++ unix file-io

在C++中,我想打开一个文件并设置其权限,但我失败了.以下是我的计划:

string filename="test.cnf";
ofstream ofile;
ofile.open(filename.c_str(),O_RDONLY);
ofile.close()
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

error: invalid conversion from 'int' to 'std::_Ios_Openmode'

error:   initializing argument 2 of 'void std::basic_ofstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]'
Run Code Online (Sandbox Code Playgroud)

如何设置文件的权限,如644,700?

Jam*_*nze 7

您似乎想要指定的选项(O_RDONLY)不是"权限",它是一种访问模式.这些是根据的组合设置隐式std::ios_base::instd::ios_base::out: in单独导致O_RDONLY,out单独在O_WRONLYin | outO_RDWR.

对于创建文件的权限,答案是相当恼人的,你不能指定它们. std::filebuf::open()(这是什么, std::ifstreamstd::ofstream最终调用)没有选项或条款传递任何权限的指示,如果它必须创建文件.
唯一的方法是使用您的系统级功能(open 在Linux下,CreateFile在Windows下 - 尽管名称,open 可能会创建一个文件,CreateFile并将打开现有文件,而不创建任何东西).使用系统级open/ CreateFile然而,这意味着使用系统级read/ ReadFilewrite/ WriteFile.