首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置C++文件夹中所有文件的权限

设置C++文件夹中所有文件的权限
EN

Stack Overflow用户
提问于 2017-10-19 17:16:09
回答 1查看 2.9K关注 0票数 2

是否有一种跨平台的方法可以递归地设置C++中文件夹内容的权限?

我不想依赖系统呼叫。

EN

回答 1

Stack Overflow用户

发布于 2017-10-19 17:16:09

使用C++17及其std::filesystem将0777授予目录中的所有文件和文件夹的示例

  • std::filesystem::recursive_directory_iterator()来遍历目录
  • std::filesystem::permissions设置每个文件的权限
  • std::filesystem::perms来决定应该设置哪些权限

代码:

代码语言:javascript
运行
复制
#include <exception>
//#include <filesystem>
#include <experimental/filesystem> // Use this for most compilers as of yet.

//namespace fs = std::filesystem;
namespace fs = std::experimental::filesystem; // Use this for most compilers as of yet.

int main()
{
    fs::path directory = "change/permission/of/descendants";
    for (auto& path : fs::recursive_directory_iterator(directory))
    {
        try {
            fs::permissions(path, fs::perms::all); // Uses fs::perm_options::replace.
        }
        catch (std::exception& e) {
            // Handle exception or use another overload of fs::permissions() 
            // with std::error_code.
        }           
    }
}

如果希望使用fs::perm_options::add而不是fs::perm_options::replace,那么这还不是跨平台的。experimental/filesystem of VS17并不知道fs::perm_options,而是将addremove作为fs::perms::add_permsfs::perms::remove_perms。这意味着std::filesystem::permissions的签名略有不同:

性病:

代码语言:javascript
运行
复制
fs::permissions(path, fs::perms::all, fs::perm_options::add);

VS17:

代码语言:javascript
运行
复制
fs::permissions(path, fs::perms::add_perms | fs::perms::all); // VS17.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46835440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档