現在,我想對一個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();
像我這麼懶的人直接上代碼就行了,再多的語言也不如代碼看的清楚明白。
今天的內容就到這了,博友們如果有問題可以咱們可以一起學習交流