使用C++项目将数据保存在磁盘上
Save data on disk with a C++ project
我在创建使用 CLion 制作的C++项目时遇到问题。 我的软件应该按磁盘加载和保存用户的配置文件,以免每次打开程序时都丢失自己的设置。显然,如果我知道.txt文件的预定义路径,这应该不是问题,但我需要我的软件始终知道该文件的保留位置。 CLion 是否允许创建一种使用 .cpp 文件构建的 txt 文件? 是否有可能为独立程序创建"内部存储器">?
当我在CLion中运行它时,我将项目目录设置为"工作目录",因此它知道在哪里可以找到"data.txt"但是当我从终端运行编译的程序(我在Linux上工作(时,它找不到数据.txt。如何使已编译项目的"工作目录"也永久化?谢谢。
您有多种选择。
1( 使用类似chdir
(在 POSIX 上(的东西始终将您的 CWD(当前工作目录(更改为已知位置。然后相对于该目录加载数据文件。
2(将数据存储在类似QSettings
或类似的东西中,这些东西已经知道如何从系统全局数据库中获取内容。
3( 找到可执行文件的路径(在 Linux 上,读取/proc/self/exe
- 其他平台上存在其他解决方案(,然后从相对于可执行文件的已知位置读取数据。
4(将数据嵌入到可执行文件中(是的,可以在磁盘上动态重写可执行文件以在其中存储数据(,然后从您自己的可执行文件中读取数据。
5(将数据存储在用户必须配置并告诉您的某个位置(如命令行参数(,然后从那里读取。
6( 从相对于用户主目录的已知位置读取。
可能还有更多我没有想到..
不要重新发明轮子,除非你绝对、肯定地必须并且能够很好地阐明问题,以记录你从头开始的原因。
您的目标操作系统/发行版将具有在系统范围和每个用户基础上保存配置文件的标准方法。使用它们!例如,在许多 Linux 发行版上,您会发现许多用户配置都保存在 ~/.config 目录中 - 这一切都归功于易于使用的系统库,最重要的是,经过全面测试!
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何检查QList中是否存在值
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 根据某个函数是否存在启用模板
- 如何将分支添加到已存在的TTree:ROOT
- 地图计数确实很重要,或者只是检查是否存在
- fwrite() 与 write() 在存在磁盘缓存的情况下