bhavya-hyd Ответов: 1

Где сохранить данные в программе на языке Си


Здравствуйте, я должен написать программу на C++, чтобы сохранить настройки пользователя
Используйте не права администратора и не можете сохранить в папке установки
Какое правильное место для сохранения данных

Что я уже пробовал:

Я пытаюсь сохранить файл во временную папку, но данные удаляются случайным образом
Как остановить удаление данных?

Garth J Lancaster

невозможно ответить, учитывая, что вы не показываете никакого кода, не объясняете, в какой версии windows вы используете, не описываете никаких других переменных-и т. д....

1 Ответов

Рейтинг:
8

Jochen Arndt

Windows предоставляет специальные папки для таких данных. Используемая папка зависит от типа данных (специфичных для пользователя или приложения).

Используйте Функция SHGetKnownFolderPath (Windows)[^] чтобы получить путь к таким папкам и добавить имя вашего приложения. Перед первым хранением данных необходимо создать папку.

В зависимости от типа данных могут использоваться следующие идентификаторы папок (см. KNOWNFOLDERID (Windows)[^] для полного списка):

На одного пользователя (недоступно другим пользователям)

FOLDERID_Documents (%USERPROFILE%\Documents)
Для личных документов, созданных вашим приложением.

FOLDERID_LocalAppData (%USERPROFILE%\AppData\Local)
Для конкретных пользовательских прикладных данных (например, настроек).

FOLDERID_RoamingAppData (%USERPROFILE%\AppData\Roaming)
Как и выше, но для учетных записей входа в домен (данные совместно используются при входе в несколько систем).

Для всех пользователей

FOLDERID_ProgramData
Для данных общесистемного применения.

FOLDERID_PublicDocuments
Для общедоступных (общих) документов, созданных вашим приложением.


bhavya-hyd

Спасибо, я думаю,что мне нужно использовать AppData / Local или Roaming, но я не знаю, является ли пользователь доменом или нет. Какой из них правильный, если я не знаю?

Jochen Arndt

Я не знаю тип вашего приложения, что хранится и как оно может быть использовано. Так что ответить трудно. Домен означает, что пользователь работает в корпоративной сети, где он входит в систему с помощью доменной службы NT. Когда перемещаемые профили включены, перемещаемая папка перенаправляется в папку на сервере. Это работает за кулисами.

Примером того, что использование перемещаемой папки не имеет смысла, являются настройки, сохраняющие размер окна приложения. При работе в системе с небольшим экраном настройки для широкого экрана недопустимы.

В таких случаях вы должны использовать обе папки: локальную для системных зависимых настроек и перемещаемую папку для системных независимых, но специфичных для приложения настроек.

Если ваши пользователи в основном работают локально (частные или используют домашние версии Windows), используйте локальную папку. Поддержка перемещаемых профилей-это удобный вариант, который можно было бы ожидать для профессионального программного обеспечения, но не всегда требуется (опять же: это зависит от типа хранимых данных/настроек).

bhavya-hyd

Спасибо, что ваши ответы очень полезны. Я думаю, что могу использовать локальный профиль, потому что я думаю, что никто не использует перемещаемый профиль. Я не могу сказать, что делает моя программа, потому что босс запрещает рассказывать о деталях