Как постоянно хранить информацию с помощью программы C? - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь получить от пользователя информацию, которую программа будет запоминать при каждом запуске. Я хочу сделать это в C. Исходя из моих ограниченных знаний компьютеров, это будет храниться в хранилище / жестком диске / SSD вместо ОЗУ / памяти. Я знаю, что могу использовать базу данных или записать в текстовый файл, но я не хочу использовать внешний файл или базу данных, так как считаю, что база данных немного излишня, и внешний файл может быть испорчен пользователем. Как я могу это сделать (заставить пользователя ввести данные один раз и программа запомнит их навсегда)? Спасибо! (Если кому-то понадобится уточнить мой вопрос, я буду рад сделать это, и когда я получу ответ, я уточню этот вопрос для будущих пользователей.)

Ответы [ 4 ]

2 голосов
/ 01 мая 2020

Люди сделали это всевозможными способами. В порядке от лучшего к худшему (на мой взгляд):

  1. Используйте реестр или эквивалентный. Вот для чего он нужен.
  2. Используйте переменную окружения . IMO, это подвержено ошибкам и может не соответствовать вашим ожиданиям.
  3. Сохраните файл на компьютере вашего пользователя. Легко сделать и просто.
  4. Сохраните файл на сервере и читайте / записывайте на сервер через сеть. Раздражает, что вы должны использовать сеть, но все в порядке.
  5. Измените свой двоичный файл на диске. Это весело, как учебный опыт, но, как правило, не рекомендуется в производственном коде. Тем не менее, иногда это можно сделать, особенно с помощью установщика.
  6. Создает фоновый процесс, который "никогда" не умирает. Это строго хуже, чем использование файла.
1 голос
/ 01 мая 2020

На самом деле не существует какого-либо распространенного способа записи в файл и в то же время запрета доступа пользователя к нему. Вам потребуется поддержка на уровне ОС / платформы, чтобы иметь какое-то защищенное хранилище.

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

(Обратите внимание, что изменение самой программы, которое Вы упомянули в комментарии, на самом деле ничем не отличается от изменения других файлов. В частности, пользователь может восстановить более раннюю версию программы из резервной копии или повторно загрузить ее, что может попробовать даже обычный пользователь. любая подпись на программном обеспечении станет недействительной из-за ваших модификаций, и антивирусное программное обеспечение может сработать.)

Если вы просто хотите sh, чтобы спрятать файл где-нибудь, чтобы защитить его от случайных пользователей (только), дайте ему скрыть имя и установить файл скрытым, используя как атрибуты файловой системы, так и имена (в системах * nix с . в качестве первого символа имени файла). (То, насколько скрытым вы можете сделать его, может быть сорвано из-за разрешений и / или «песочницы», в зависимости от ОС.)

Также обратите внимание, что если ваша цель - скрыть информацию от пользователя, вы должны каким-то образом ее зашифровать. Это включает в себя любые фрагменты данных, которые являются частью программы, которая их записывает.

edit : на случай, если я угадал неправильно, и причина желания сделать это - просто сохранить вещи " очистить », а затем просто сохранить его в обычной области« пользовательских настроек »платформы. Например, AppData или реестр в Windows, пользовательские настройки по умолчанию или ~/Library/Application Support в macOS, «точечный файл» в системах generi c * nix и т. Д. c. По этой причине не изменяйте само приложение.

1 голос
/ 01 мая 2020

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

0 голосов
/ 01 мая 2020

Если вы хотите сохранить данные, типичным способом является сохранение их в файл. Просто используйте FILE * и go для вашего бизнеса.

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

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

...