如何使用C程序永久存储信息?

时间:2020-04-30 21:06:31

标签: c storage hard-drive

我试图从用户那里得到输入,该程序每次运行时都会记住。我想用C语言执行此操作。基于我对计算机的有限了解,此文件将存储在存储设备/硬盘驱动器/ ssd中,而不是存储在RAM /内存中。我知道我可以使用数据库,也可以写入文本文件,但是我不想使用外部文件或数据库,因为我认为数据库对此有点过大,并且可能会使外部文件混乱由用户。我该怎么做(让用户输入一次,让程序永远记住它)?谢谢! (如果有人需要我澄清我的问题,我很乐意这样做,当我得到答案时,我会为将来的用户澄清这个问题。)

4 个答案:

答案 0 :(得分:2)

人们已经通过各种方式做到了这一点。从好到坏的顺序(我认为):

  1. 使用registry或等效名称。那就是它的用途。
  2. 使用environment variable。 IMO,这容易出错,可能并不是您真正想要的。
  3. 将文件存储在用户的计算机上。简单易行。
  4. 将文件存储在服务器上,并通过网络对该服务器进行读写。令人烦恼的是您必须使用网络,但是可以。
  5. 修改磁盘上的二进制文件。这是一种有趣的学习经历,但是在生产代码中通常不建议这样做。有时仍然可以完成,尤其是使用安装程序。
  6. 产生一个“永不死”的后台进程。严格来说,这比使用文件要糟糕。

答案 1 :(得分:1)

如果用户确实愿意,则将无法阻止用户修改文件。您可以做的是创建一个文件名或扩展名,以使其明显不应该被修改,或者对用户隐藏。

答案 2 :(得分:1)

实际上没有什么通用的方法可以写入文件,同时阻止用户访问该文件。您需要OS /平台级别的支持才能拥有某种受保护的存储。

通常唯一可用的真实选择是将信息在线存储在您控制的服务器上,并通过网络从那里获取信息。您可以缓存具有到期日期的加密签名的本地副本,以避免每次程序运行时都必须连接。当然,如果您是以某种DRM或类似的方式(例如,限时演示)来执行此操作,则还需要保护您的软件不被修改。

(请注意,您在注释中提到的修改程序本身与修改其他文件并没有什么不同。特别是,用户可以从备份中恢复程序的早期版本,也可以通过重新下载来恢复程序,即使是临时用户也可以尝试这样做。此外,该软件上的任何签名都会因您的修改而变得无效,并且可能会触发防病毒软件。)

如果您只是希望将文件隐藏在某个地方以防止偶然的用户使用(仅),请给它起一个晦涩的名称,并使用文件系统属性和命名(在* nix系统中将.设置为文件名的第一个字符)。 (根据操作系统的不同,权限和/或沙箱可能会使您隐藏起来的程度受到阻挠。)

还请注意,如果您的目标是向用户隐藏信息,则应以某种方式对其进行加密。这包括作为写入程序的一部分的数据。

编辑:以防万一我猜错了,而这样做的原因只是为了保持“干净”,然后将其存储在平台通常的“用户设置”区域中。例如,Windows上的AppData或注册表,用户默认值或macOS上的~/Library/Application Support,通用* nix系统上的“ dotfile”等。因此,请勿修改应用程序本身。

答案 3 :(得分:0)

如果要保留数据,通常的方法是将其存储到文件中。只需使用FILE *即可开展业务。

为此使用数据库可能是一个过大的决定,它取决于您希望在存储数据之后如何访问数据。

如果仅从文件中加载数据并进行搜索,则不需要数据库,如果有大量数据并且想要进行复杂的搜索,那么使用数据库就可以了。如果您需要冗余,用户处理,安全性,那么请选择一个数据库,因为每个数据库的开发人员已经花费了大量时间来解决此问题。

相关问题