C++中读取文件ifstream、ofstream

现在,我想对一个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();

像我这么懒的人直接上代码就行了,再多的语言也不如代码看的清楚明白。

今天的内容就到这了,博友们如果有问题可以咱们可以一起学习交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章