以编程方式设置子文件夹创建权限C++

问题描述 投票:0回答:1

根据我在这里找到的内容:https://en.cppreference.com/w/cpp/filesystem/permissions我尝试以编程方式设置文件夹的写入权限,以便能够以编程方式创建一个子文件夹。

    void demo_perms(std::filesystem::perms p)
    {
        using std::filesystem::perms;
        auto show = [=](char op, perms perm)
        {
            std::cout << (perms::none == (perm & p) ? '-' : op);
        };
        show('r', perms::owner_read);
        show('w', perms::owner_write);
        show('x', perms::owner_exec);
        show('r', perms::group_read);
        show('w', perms::group_write);
        show('x', perms::group_exec);
        show('r', perms::others_read);
        show('w', perms::others_write);
        show('x', perms::others_exec);
        std::cout << '\n';
    }

    cwd = std::filesystem::current_path();
    std::filesystem::permissions(
        cwd,
        std::filesystem::perms::owner_all | std::filesystem::perms::group_all,
        std::filesystem::perm_options::add
    );
    demo_perms(std::filesystem::status(cwd).permissions());
        
    if(!std::filesystem::exists(graspdatafolderpath))
    {
        std::filesystem::create_directory("/GraspData");
    }

输出:

    rwxrwxr-x
    Unhandled standard exception of type "NSt10filesystem7__cxx1116filesystem_errorE" with message "filesystem error: cannot create directory: Permission denied [/GraspData]"; terminating the application

但是,正如你所看到的,我所尝试的方法不起作用

如何让它发挥作用?

c++ permissions std-filesystem
1个回答
0
投票

根据您在 https://en.cppreference.com/w/cpp/filesystem/permissions 上找到的内容,您尝试以编程方式设置文件夹的写入权限,以便您可以以编程方式创建子文件夹。

您尝试使用 lambda 函数显示文件夹权限信息,然后更新当前工作目录的权限以允许所有所有者和组权限。随后,您尝试创建一个名为“/GraspData”的文件夹。但是,您遇到了“权限被拒绝”错误。

要使其正常工作,请确保程序以足够的权限运行来修改文件夹权限和创建子文件夹。这可能需要以管理员身份运行程序或确保程序对目标目录具有必要的写入权限。

此外,请验证程序尝试访问的路径是否正确,确保用于创建子文件夹的父文件夹存在,并确认程序有权在该位置创建子文件夹。

最后,考虑优化代码,例如使用绝对路径代替相对路径以提高准确性,以及添加错误处理机制以更好地处理关键操作期间潜在的异常。这些建议旨在帮助您解决问题并使代码按预期运行。

© www.soinside.com 2019 - 2024. All rights reserved.