从 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 可执行文件和 运行 提升。但是以编程方式?如果可能的话?我会为此提出一个新问题。
要解决您最初的问题,您需要具有管理权限才能从该特殊文件夹中删除。
我正在尝试从程序数据中删除 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 可执行文件和 运行 提升。但是以编程方式?如果可能的话?我会为此提出一个新问题。
要解决您最初的问题,您需要具有管理权限才能从该特殊文件夹中删除。