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();

像我這麼懶的人直接上代碼就行了,再多的語言也不如代碼看的清楚明白。

今天的內容就到這了,博友們如果有問題可以咱們可以一起學習交流

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