现在,我想对一个utf-8的json文件进行读写操作。在此过程中,遇到了一些问题。
头文件的添加:
#include <iostream>
#include <cstring>
#include <fstream>
#include <sstream>
(一)ifstream读取文件
A:使用char*的方式读取
ifstream readFile;
readFile.open(L"需要读取的文件名.json"); //打开需要操作的文件
if (readFile.fail())
{
return FALSE; //说明文件读取失败!
}
readFile.seekg(0 , std::ios::end); //将指针指向文件的结尾
int nLen = readFile.tellg(); //获取文件的长度
readFile.seekg(0 , std::ios::beg); //再将指针指向文件的开始,主要是为了读取数据
char* buffer = new char[nLen];
readFile.read(buffer , nLen); //读取文件中的内容
readFile.close(); //在不对文件进行操作时,一定要关闭文件
B:使用string流的方式读取
ifstream readFile;
readFile.open(L"测试文本.json"); //打开需要操作的文件
if (readFile.fail())
{
return ; //说明文件读取失败!
}
std::string sBuffer;
readFile>>sBuffer;
int nLen = sBuffer.length();
使用这种方式的时候,有一些问题。我们可以看一下我调试的结果
当读取json文件时,遇到换行变会截断了。如果你要是觉得只有json文件才有这个错误,那就打错特错了!大家可以尝试下哈
C:现在,我们还是用流的方式读
使用这种方式时,不会再出现以上的数据丢失问题
ifstream readFile;
readFile.open(L"测试文本.json"); //打开需要操作的文件
if (readFile.fail())
{
return ; //说明文件读取失败!
}
std::stringstream streambuffer;
streambuffer<<readFile.rdbuf();
string sdata(streambuffer.str());
int nLen = sdata.length();
此时,调试出来的内容可以看到全部的数据了,大家可以使用一个文件测试下。
上面,我展示了两类读取文件的方式,一个是char*数组读取,一个是string流数据读取。其实,在这里,如果步步调试代码的同学就会发现一个问题,当用char*读取文件的长度比用string流方式读取的文件长度长!(如有问题可以验证)在此,我再郑重声明下,我做测试的文件是utf-8格式的json串。
(二)ofstream写入文件
ofstream writeFile;
writeFile.open(L"需要写入的文件名.json");
if (!writeFile)
{
return FALSE; //打开文件失败
}
writeFile<<schangeData;
writeFile.close();
像我这么懒的人直接上代码就行了,再多的语言也不如代码看的清楚明白。
今天的内容就到这了,博友们如果有问题可以咱们可以一起学习交流