把網上搜尋的內容大致匯總一下:
1.text方式寫入檔案會將換行(/n)擴充成/r/n, 讀檔案時則自動轉換回來
2.binary方式則不會作任何擴充,與讀寫內容一致
3.預設為text方式
詳細參考:http://blog.csdn.net/wanfustudio/archive/2007/09/14/1785131.aspx
附錄:自己寫的使用fstream讀寫檔案的兩個函數
#include <fstream>
using namespace std;
bool Preprocess::ReadParseRsltFile(tstring FileName)
{
TCHAR szFull[MAX_PATH] = {0};
_tcscpy_s(szFull, MAX_PATH, m_szDataFileDir);
_tcscat(szFull, TEXT("//"));
_tcscat(szFull, FileName.c_str());
_tcscat(szFull, TEXT("_r"));
wifstream fin;
fin.open(szFull, ios::binary);
if (fin.bad())
{
return false;
}
fin.imbue(std::locale("chs"));
TCHAR szSize[16] = {0};
fin.getline(szSize,16); //第一行為檔案大小
int nSize = _ttoi(szSize);
tstring strTmp;
for(int i=0; i<nSize; i++)
{
getline(fin, strTmp);
m_vSenParRslt.push_back(strTmp);
}
fin.close();
return true;
}
void Preprocess::WriteFiles(tstring FileName, const vector<tstring>&vContent)
{
TCHAR szFull[MAX_PATH] = {0};
_tcscpy_s(szFull, MAX_PATH, m_szDataFileDir);
_tcscat(szFull, TEXT("//"));
_tcscat(szFull, FileName.c_str());
wofstream fout;
fout.open(szFull, ios::binary|ios_base::trunc);
// fout.clear();
fout.imbue(std::locale("chs"));
fout<<vContent.size()<<"/n";
for(int i=0; i<vContent.size(); i++)
{
fout<<vContent[i].c_str()<<"/n";
}
fout.close();
}
寫入的內容包含中文,所以必須加上: fout.imbue(std::locale("chs"));
tstring 是自己定義的宏,代表string 或者wstring
#ifdef _UNICODE
#define tstring wstring
#else
#define tstring string
#endif