Создайте файл только для чтения в переполнении стека

Мне нужно сохранить текстовую информацию, используя мое приложение 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, связанный с моим кодом.

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);

Ссылка на дополнительную файловую систему

2

Другие решения

Вы также можете просто сделать это:

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, так как использует прямую консольную команду.

1

Я бы использовал следующий код:

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

0
По вопросам рекламы [email protected]