从 ProgramData 中删除 Config.json 文件时,在 C++ 中显示 "Permission Denied"

When removing the Config.json file from the ProgramData, showing "Permission Denied" in C++

我正在尝试从程序数据中删除 config.json 文件,但是下面的代码显示“权限被拒绝”。

int main()
{
        std::string f_strConfigFile = "C:\ProgramData\TestApplication\TestConfig.json";

        std::string l_strFileContents;
        std::ifstream l_ifConfigFileStream(f_strConfigFile.c_str());
        if (l_ifConfigFileStream)
        {
            l_ifConfigFileStream.seekg(0, ios::end);
            size_t l_szFileSize = (size_t)l_ifConfigFileStream.tellg();
            l_ifConfigFileStream.seekg(0, ios::beg);
            char* l_chBuffer = new char[l_szFileSize + 1];
            memset(l_chBuffer, 0, l_szFileSize + 1);
            l_ifConfigFileStream.read(l_chBuffer, l_szFileSize + 1);
            l_strFileContents.assign(l_chBuffer);
            delete[] l_chBuffer;
        }
        l_ifConfigFileStream.close();

        if (l_strFileContents.empty())
        {
            l_strFileContents.assign("{}");
        }
        if (remove(f_strConfigFile.c_str()) != 0)
        {
            std::cout << "Failed to remove the file" << endl;
        }
        else
        {
            std::cout << "Removed the file" << endl;
        }
    return 0;
}

有人可以建议如何删除配置文件吗?

常用应用程序数据文件夹

您的代码本身可能没有任何问题。尽管我支持评论中提出的所有建议。它们将使您的代码更有效率。

评论中你说:

I tried by printing errno. It is showing "Permission denied".

需要

管理员 权限才能 文件保存到通用应用程序数据文件夹 (%programdata%)。虽然所有用户都具有 读取权限

如果您想删除,您需要提升的管理员权限

运行 你的可执行文件 elevation 我打赌它会删除文件。

上面的原理在其中一个答案中也有讨论(How to write to the common Application Data folder?)。


管理员权限

您也在评论中提问:

How to provide elevated permissions when removing the file from the code?

这真是一个不同的问题。对于它的价值,在我的应用程序中,我有一个专门用于管理任务的可执行文件。我以更高的权限生成它。我对话框​​上的按钮有一个盾牌,表示它需要 运行 提升。

当然,您可以 right-click 可执行文件和 运行 提升。但是以编程方式?如果可能的话?我会为此提出一个新问题。


要解决您最初的问题,您需要具有管理权限才能从该特殊文件夹中删除。