gpt4 book ai didi

c++ - 在 C++ 中创建一个只读文件

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:53 26 4
gpt4 key购买 nike

我需要使用我的 VC++ MFC 应用程序将文本信息保存在一个文件中,这样它将是只读的。到目前为止,我已经考虑了两种选择,但我对其中任何一种都不满意

1) 我可以将文件另存为 pdf。但是我看过的几个 pdf 库似乎都有一个陡峭的学习曲线。

2) 将文件压缩到存档中,甚至用密码保护它。但是,这仍然不能使它成为只读的。对于压缩,我找到了这个很棒的库 - http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win

你能建议我一个更好的方法吗。

FWIW,我使用的是 Visual Studio 2013,所以我可以使用 C++11。此外,我已将 Boost 链接到我的代码中。

最佳答案

您可以使用 boost::filesystem 通过以下函数完成此操作:

void permissions(const path& p, perms prms);

path 可以从字符串构造,所以没有问题。困难的部分是 perms,它是一种位掩码。您需要在该位掩码中使用 remove_perms 来表示应删除权限。

以下代码应该可以工作(未经测试):

using boost::filesystem::perms;
boost::filesystem::path myPath("foo.txt");
boost::filesystem::permissions(myPath,
perms::remove_perms|perms::owner_write|perms::others_write|perms::group_write);

Boost Filesystem reference


编辑 9/8/2020

关于删除只读文件的注意事项。在 Linux 中,只要有人对直接父目录具有写权限,他们就可以删除该文件(除非您使用 extreme measures )。在 Windows 中,您需要恢复对该文件的写入权限才能将其删除。

我选择了删除权限,而不是在原始答案中将权限明确设置为只读,因为 Boost 文档有一条关于只有写权限如何执行任何操作的注释。有趣的是,我可以说我在 permissions(path, owner_read|others_read|group_read)(在 Windows 中)方面取得了成功,但为了安全起见,我想我们应该遵循文档。

我还想指出,如果你有 C++17,这整个答案基本上没有实际意义,因为 std::filesystem 对你可用(API 非常像 Boost 的) .

关于c++ - 在 C++ 中创建一个只读文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26103389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com