文章目录
- 一、JsonCpp的基本用法
- 二、ofstream和ifstream详细用法
- 三、fstream 修改文本文件、json文件
- 四、fstream 打开和写入文件
-
-
- 1.在进行文件写的时候(非二进制),文件指针很成问题。举个例子:比如文件的内容是"100100100",写入了三个int类型的变量,值为100。接下来我如果想改变第二个100,使其变成200,文件指针需要移动3位,因为前面有三个字符。这时候指针是一个字符一个字符的移动的。
- 2.而如果把文件换成二进制的写,那么情况就会有些变化,如果还是想改写第二个100的内容,那么文件指针就需要指向sizeof(int)。指针是一个byte一个byte地移动。 int存入的方式就是以int类型,将其原封写入文件,所以二进制的读写比较简单。
- 3.经实验表明,ios::app Mode下是不能移动文件指针的,而且这个时候tellp()是0。此模式下只能在后面追加着写。
- 4.如果想要获得指向末尾的位置指针,需要
-
- 五、json文件修改
- 六、json文件读写
- 七、c++ jsoncpp 读写json
- 八、opencv读写json yaml xml
一、JsonCpp的基本用法
二、ofstream和ifstream详细用法
三、fstream 修改文本文件、json文件
可以使用fstream来打开、读取和修改文本文件。首先使用ifstream对象打开要读取的文件,接着使用while循环逐行读取文件内容,将需要修改的行进行修改,最后使用ofstream对象将修改后的内容写回文件中。具体的实现方法可以参考C++的相关文档和教程。
1. 具体代码实现见我这篇博客,用string详细实现了文本文件中字符查找,修改。
2. 这是针对json文件进行的特殊操作。先把string解析成json,使用key查找到值后直接修改,完了保存。(包含里json紧凑型和标准型输出方式)
#include <iostream>
#include <fstream>
#include <string>
#include "json/json.h"
using namespace std;
int main2(int argc, char** argv){
const char* config_file = NULL;
if (argc > 1){
config_file = (const char*)argv[1]; // Get input json file
}
else{
config_file = "config.json"; // If not specified, use the default file name
}
Json::Reader json_reader;
Json::Value json_value;
//二进制格式打开
//ifstream infile(config_file, ios::binary);
//文本文件打开
ifstream infile(config_file, ios::in| ios::out);
if (!infile.is_open())
{
cout << "Open config file failed!" << endl;
return -1;
}
std::string json_file;
//把文本文件解析成json格式
if (json_reader.parse(infile, json_value))
{
//读json
string name = json_value["name"].asString(); // 读取字符串型参数
string sex = json_value["sex"].asString();
int age = json_value["age"].asInt(); // 读取int型参数
//写入参数
json_value["age"] = 27; // 读取int型参数
//紧凑型格式
//Json::FastWriter writer;//写文件
//json_file = writer.write(json_value);
//标准型格式
Json::StyledWriter writer;//写文件
json_file = writer.write(json_value);
//读参数
bool marriage = json_value["marriage"].asBool(); // 读取布尔型参数
string university = json_value["education"]["university"].asString(); //读取嵌套类型
string major = json_value["education"]["major"].asString();
Json::Value courses = json_value["education"]["courses"]; // 读取值为Array的类型
cout << "name = " << name << endl;
cout << "sex = " << sex << endl;
cout << "age = " << age << endl;
cout << "marriage = " << marriage << endl;
cout << "Education informatin: " << endl;
cout << " university: " << university << endl;
cout << " major: " << major << endl;
cout << " Courses:"