如何确定使用C++可以写入文件

3
在C++中,如何确定程序对文件具有只读访问权限还是读写访问权限?我查找了boost文件系统库,但仍未找到可帮助我的内容。目前,我考虑打开文件,尝试在内部进行写操作并检查错误,但这似乎不是一个非常适当的做法。有任何线索吗?注:需要跨平台。

2
我相信你的方法是推荐的方法。 - Jim Wallace
2个回答

5

系统调用是大多数运行时库完全支持的,

#include <unistd.h>

if (0 == access (char *pathname, int mode))
    // permission is granted

其中modeF_OK表示测试文件是否存在,或者是由一个或多个R_OKW_OKX_OK按位或组成的掩码。


1
根据BSD系统调用手册,access()函数是一个潜在的安全漏洞,不应该被使用。Linux man页面也指出了安全风险,但并未说明该函数不应该被使用。 - jschmier
这不是一个系统调用,只支持在POSIX系统上。 - anon
简单明了,我喜欢这个!不过,它需要跨平台,所以我不能使用unistd.h... - Laurent Bourgault-Roy

5

说到底,测试你是否能在现代操作系统上写入数据到文件的唯一方法是尝试实际写入。在测试权限和实际写入之间,许多事情可能已经发生在文件中。


我对boost::filesystem还比较新,但为什么不使用file_status::permissions呢? - Michael Repucci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接