c++ - 是否可以在程序关闭后在内部保存变量并对其进行读/写?

标签 c++ executable storing-data

<分区>

我一直在寻找一段时间,但没有希望。 基本上我想知道是否有可能在程序退出后保存一个变量并在可执行文件中读取它。

我知道可以使用 fstream 函数将变量存储在外部文件中,但我正在寻找一种方法将其存储在内部,就像在 .exe 中一样。

string l;
cin >> l;
// function to save it internally.....

提前致谢o.o

最佳答案

这里有一些提示说明为什么这不是一个好主意。

  • 这并不比使用另一个文件更好。
    • 您不能将一大块内存作为“我的所有数据”访问并将其写入文件,因此您必须正确地序列化/反序列化。一旦您有了可用的代码,与写入一个空文件相比,处理复杂的文件格式(无论是 ELF 还是 PE)实际上是更多的工作。
  • 实际上更糟。
    • 写入数据时的错误可能会使您的程序无法运行。
    • 多个用户不能各自拥有自己的数据。
  • 您的可执行文件通常是不可写的。
    • 在基于 Unix 的系统上,二进制文件通常安装到系统目录中,普通用户根本无法更改它们。
    • 即使以 root 身份运行,系统分区为只读的情况并不少见(例如,我自己的设置将 / 安装为只读)。
    • 在 Windows 系统上,虽然以管理员权限运行更为常见,但这并不普遍,而且运行程序的二进制文件是锁定的。
  • 即使您设法解决所有这些问题,它也会妨碍数据的可移植性。
    • 您的程序和数据的安装和更新已消失。
    • 无法备份您的数据并稍后恢复(可能在另一个系统上)。
  • 当时唯一修改可执行文件的程序是恶意软件。因此,拦截可执行修改程序并将其关闭是反恶意软件最基本的功能之一。
    • 按照这些思路,在实现签名二进制文件或任何类型的信任系统的系统上,您修改后的二进制文件将无法通过签名测试。

因此,您的程序和用户体验中有很多怪癖、很多复杂的解决方法(需要请求特殊权限、棘手的保存和备份、很可能丢失数据)。另一方面,简单地保存到数据文件很容易实现并且用户友好。

关于c++ - 是否可以在程序关闭后在内部保存变量并对其进行读/写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002784/

相关文章:

database - xCode,将数据存储在设备上,稍后上传到服务器数据库

ios - 更新后的plist数据

mysql - 在 mysql 表中存储组成员的最佳方法

java - 在运行时用 Java 执行 .exe 或 .linux 文件

c++ - 将函数实现为自由函数而不是 C++ 中的成员有什么优势吗?

c++ - 如何创建n维测试数据进行聚类分析?

c++ - partial_sort 和智能指针

c++ - 如何使用密码(C/C++)锁定Windows 7计算机屏幕

scala - 如何构建独立的 scala 可执行文件

java - 如何创建可执行的可执行 jar (Maven-Jfoenix-Hibernate-IntelliJ) __ 有人可以使主题解析/关闭吗