Мне нужно сохранить текстовую информацию, используя мое приложение 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);
Вы также можете просто сделать это:
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, так как использует прямую консольную команду.
Я бы использовал следующий код:
HANDLE hFile = CreateFile (L «read_only_file.txt», GENERIC_ALL, 0, NULL, FILE_SHARE_WRITE, FILE_ATTRIBUTE_READONLY, NULL);