如何在C++中打开文件时设置文件权限
How do I set file permissions when opening a file in C++?
在C++中,我想打开一个文件并设置其权限,但我失败了。以下是我的程序:
string filename="test.cnf";
ofstream ofile;
ofile.open(filename.c_str(),O_RDONLY);
ofile.close()
但是我收到以下错误:
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>]'
如何将文件的权限设置为644,700?
您似乎想要指定的选项(O_RDONLY
(不是"权限",这是一种访问模式。 这些是隐式设置的对于std::ios_base::in
和std::ios_base::out
的组合: 单独in
导致O_RDONLY
,out
单独导致O_WRONLY
,in |
out
O_RDWR
。
对于创建文件的权限,答案是,相当烦人,您无法指定它们。 std::filebuf::open()
(这就是 std::ifstream
和std::ofstream
最终调用(没有选择或规定在以下情况下传递要使用的任何权限指示必须创建文件。
执行此操作的唯一方法是使用系统级函数(open
在 Linux 下,CreateFile
在 Windows 下——尽管有名字,open
可以创建一个文件,CreateFile
将打开一个现有文件,没有创建任何内容(。 但是,使用系统级open
/CreateFile
,表示使用系统级read
/ReadFile
和write
/WriteFile
。
fstream
没有O_RDONLY
模式。您应该使用以下之一:
-
ios::app
-
ios::binary
-
ios::ate
-
ios::in
-
ios::out
-
ios::trunc
或者它们的组合(比如ios::app | ios::binary
(。对于您的情况,您应该使用ios::in
(可能带有ios::binary
(。查看此内容以获取更多详细信息。
如果你在Unix系统上,你需要的是"setmode"或"getmode"函数。
从你的 shell 命令行中,键入"man setmode">
- fstream::open 的第二个参数是在 ios::app、ios::binary、ios::ate、ios::
in、ios::out、ios::trunc 中选择的标志的组合。
没有标准的C++接口来设置访问权限。 我知道的实现使用的是 0666,然后被 umask(2( 设置的值屏蔽。这也是 unix 应用程序的通常行为(掩码继承自父级,shell 具有内置的掩码命令(。 我的建议是,你什么都不做,依赖于用户设置的掩码。如果这不适用,请暂时更改应用中的掩码。
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 在C++中设置基于操作系统的文件路径
- 如何将 2 个类分成单独的 .h 文件并正确设置它们
- 如何将多种语言设置放在单个 .clang 格式文件中
- 检测到 Conan 配置文件设置与 CMake 之间的编译器版本不匹配
- 如何在运行时对程序创建的.sys文件设置文件版本
- 将 TXT 文件设置为输出和和输入
- 使用 API 而不是全局配置文件设置 OSM 配置选项
- 文件设置正确,但eof()和peek()意外地从新流返回了错误的值
- 在 C++ 中为文件夹中的所有文件设置权限
- 如何使用CMakeLists.txt为我的可执行文件设置bash中的环境变量
- 对于Android Studio NDK Gradle,如何为不同文件设置不同的CFLAG
- 使用文本文件设置交集C++
- 在多个源文件/头文件中使用c++类时的头文件设置
- 为ofstream创建的文件设置默认位置
- 如何在linux上使用c++为特定文件设置文件属性(1644)
- 仅为c++头文件设置vim文件类型脚本
- 通过.rc文件设置dll属性:Windows 7显示哪些属性
- 如何为不同操作系统的可执行文件设置目录
- 如何通过.props文件设置调试符号路径