用C ++创建只读文件

时间:2014-09-29 15:25:19

标签: c++ file mfc readonly

我需要在文件中使用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链接到我的代码中。

3 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

您也可以这样做:

ofstream out;
out.open("test.txt");
out.close();
//attrib [parameters] [file]
//+R -> readonly
//+H -> hidden
//+S -> system file (ultra hidden)
//There are more, type 'attrib /?' in cmd to find all of the options
system("attrib +R test.txt");

就是这样!如果您有任何问题,请告诉我。

修改

这仅适用于Windows,因为它使用直接控制台命令。

答案 2 :(得分:0)

我会使用以下代码:

HANDLE hFile = CreateFile(L“read_only_file.txt”,GENERIC_ALL,0,NULL,FILE_SHARE_WRITE,FILE_ATTRIBUTE_READONLY,NULL);