我想知道如何检查我是否对文件夹有写权限。
我正在编写一个 C++ 项目,我应该将一些数据打印到 result.txt 文件中,但我需要知道我是否有权限。
Linux 和 Windows 之间的检查是否不同?因为我的项目应该在 Linux 上运行,而目前我在 Visual Studio 中工作。
原文由 Aviadjo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想知道如何检查我是否对文件夹有写权限。
我正在编写一个 C++ 项目,我应该将一些数据打印到 result.txt 文件中,但我需要知道我是否有权限。
Linux 和 Windows 之间的检查是否不同?因为我的项目应该在 Linux 上运行,而目前我在 Visual Studio 中工作。
原文由 Aviadjo 发布,翻译遵循 CC BY-SA 4.0 许可协议
唯一合理的做法是尝试创建文件,如果失败,告诉用户有问题。任何提前测试的尝试,并且只有在您能够创建和写入文件的情况下才尝试创建文件,否则会因竞争条件而出现问题(在您检查时已获得许可,但在您尝试时已将其删除使用它,反之亦然)和极端情况(例如,您 有权 在该目录中创建文件,但尝试在那里写入将超出您的磁盘配额)。唯一知道的方法是尝试…
原文由 Jerry Coffin 发布,翻译遵循 CC BY-SA 2.5 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答469 阅读✓ 已解决
检查权限的可移植方法是尝试打开文件并检查是否成功。如果不是,并且
errno
(从标题<cerrno>
设置为值EACCES
[是的,有一个 S],那么您没有足够的权限。这应该适用于 Unix/Linux 和 Windows . stdio 的示例:Iostreams 的工作方式会有所不同。 AFAIK,他们不保证在两个平台上都设置
errno
,或者报告比“失败”更具体的错误。正如 Jerry Coffin 所写, _不要依赖单独的访问测试函数_,因为您的程序很容易出现竞争条件和安全漏洞。