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

Avi*_*djo 8 c++ permissions file

我想知道如何检查我是否具有文件夹的写权限.

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

Linux和Windows之间的检查有所不同吗?因为我的项目应该在Linux上运行,目前我在Visual Studio中工作.

Fre*_*Foo 10

检查权限的可移植方法是尝试打开文件并检查是否成功.如果没有,并且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;
}
Run Code Online (Sandbox Code Playgroud)

Iostreams的工作方式会有所不同.AFAIK,他们不保证errno在两个平台上设置,或报告更多特定错误而不仅仅是"失败".

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

  • 你的程序为什么要崩溃?:S (2认同)
  • 我建议使用“ a”模式。假设您具有写权限,并且使用“ fclose”;那么现有文件将被一个空文件覆盖... (2认同)

Jer*_*fin 5

关于唯一合理的事情是尝试创建文件,如果失败,告诉用户有问题.任何提前测试的尝试,并且只有在你能够创建并写入文件时才尝试创建文件,这对于竞争条件下的问题是开放的(当你检查时有权限,但是当你尝试时它被删除了使用它,反之亦然)和极端情况(例如,您有权在该目录中创建文件,但尝试在那里写入将超过您的磁盘配额).要知道的唯一方法是尝试......