在 Windows/Linux 中检查文件的写入权限

新手上路,请多包涵

我想知道如何检查我是否对文件夹有写权限。

我正在编写一个 C++ 项目,我应该将一些数据打印到 result.txt 文件中,但我需要知道我是否有权限。

Linux 和 Windows 之间的检查是否不同?因为我的项目应该在 Linux 上运行,而目前我在 Visual Studio 中工作。

原文由 Aviadjo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 817
2 个回答

检查权限的可移植方法是尝试打开文件并检查是否成功。如果不是,并且 errno (从标题 <cerrno> 设置为值 EACCES [是的,有一个 S],那么您没有足够的权限。这应该适用于 Unix/LinuxWindows . stdio 的示例:

 FILE *fp = fopen("results.txt", "w");
if (fp == NULL) {
    if (errno == EACCES)
        cerr << "Permission denied" << endl;
    else
        cerr << "Something went wrong: " << strerror(errno) << endl;
}

Iostreams 的工作方式会有所不同。 AFAIK,他们不保证在两个平台上都设置 errno ,或者报告比“失败”更具体的错误。

正如 Jerry Coffin 所写, _不要依赖单独的访问测试函数_,因为您的程序很容易出现竞争条件和安全漏洞。

原文由 Fred Foo 发布,翻译遵循 CC BY-SA 2.5 许可协议

唯一合理的做法是尝试创建文件,如果失败,告诉用户有问题。任何提前测试的尝试,并且只有在您能够创建和写入文件的情况下才尝试创建文件,否则会因竞争条件而出现问题(在您检查时已获得许可,但在您尝试时已将其删除使用它,反之亦然)和极端情况(例如,您 有权 在该目录中创建文件,但尝试在那里写入将超出您的磁盘配额)。唯一知道的方法是尝试…

原文由 Jerry Coffin 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题