c++ - 我应该担心用户可能会弄​​乱我的程序文件吗?

标签 c++ linux

我正在为 Linux 编写一个 C++ 程序,它在工作期间在磁盘上创建一些文件。这些文件包含有关程序内部对象状态的信息,以便程序下次启动时读取这些文件以恢复上一次 session 。其中一些文件也在执行期间被读取/写入以读取/写入一些变量值。问题是修改/重命名/删除这些文件会导致未定义的行为、段错误和其他意外导致程序崩溃。我当然不会限制用户访问他/她机器上的文件,但在程序内部,我总是可以在访问文件之前检查文件是否已被修改,以至少防止程序崩溃。它会涉及许多额外的检查并使代码更大。
问题是处理此类问题的良好做法是什么?我应该如此偏执,还是只是期望用户足够聪明,不会弄乱程序文件?

最佳答案

首先,检查您的资源是否值得付出努力。用户甚至会想要跟踪和编辑这些文件吗?
如果是这样,我的建议是:不要担心文件是否已被修改。相反,您应该验证您获得的输入(从文件中)。
这可能不是最令人满意的答案,但错误处理是编程的重要组成部分,尤其是在输入验证方面。
假设您正在写入 ~/.config/yourApp/state.conf .

  • 准备默认值。
  • 文件是否存在?如果不使用默认值。
  • 使用一些众所周知的结构,如 INI、JSON、YAML、TOML,您可以命名它,用户可以理解并且应用程序可以检查完整性(库在这里可能会有所帮助)。如果文件损坏,请使用默认值。
  • 如果用户确实删除了单个条目,请使用默认值。
  • 有些值值得特别检查,以防越界访问会导致未定义的行为。如果值超出范围,请使用默认值。
  • 忽略未知字段。
  • 如果您无法从格式错误的输入中恢复,请提供有意义的错误消息,以便用户可以恢复保存状态(从备份恢复或从头开始)。
  • 关于c++ - 我应该担心用户可能会弄​​乱我的程序文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67538463/

    相关文章:

    linux - 上传代码到生产服务器

    linux - 适用于 gnome 桌面版的 Wiki 编辑器

    我可以在运行时检查磁盘访问吗?

    c++ - 在线程中创建 COM 对象

    c++ - 从二进制文件中删除未使用的函数

    c++ - gdb,连接到使用 gdbserver 启动的正在运行的进程

    c++ - Ranged for loop const 引用似乎没有什么区别

    c++ - Qt 复选框和单选按钮不显示

    javascript - 为什么从 node.js 应用程序调用 iostat 会给我旧信息?

    c++ - pass-by-reference & 和 * 之间的区别?