C++ 数据写入文件与读回

    软件制作过程常常需要将一些设置参数存成文件以供下次启动时调用,这时运用CArchive类来进行相关操作显得相当方便。

    将数据写入文件:

int data = 123;
CFile mydatafile(L"datasave.h264player", CFile::modeCreate | CFile::modeWrite);//datasave.h264player为文件名,使用的是相对路径,文件被存成在本软件目录下
CArchive mywiringdatafile(&mydatafile, CArchive::store);
mywiringdatafile << data;//将数据写入
mywiringdatafile.Close();
mydatafile.Close();

   

    将数据读回:

int data;
CFile mydatafile(L"datasave.h264player", CFile::modeRead);
CArchive mywiringdatafile(&mydatafile, CArchive::load);
mywiringdatafile >> data;//读回文件的数据到data变量里面
mywiringdatafile.Close();
mydatafile.Close();

    由上面的写读操作也可以发现一个问题,我们必须知道文件的存储结构才能将数据正确地读回,这对于数据起到一种较为初级的保护作用。


    而有些时候我们需要一行一行的读写数据,MFC中我们可以借助CStdioFile类来做这件事

    读取行数据:

CStdioFile mPcbFile;
mPcbFile.Open(L"PCB//JK-M012-V4.apr", CFile::modeRead);//文件打开
CString mLineData;
while (mPcbFile.ReadString(mLineData))
{
	//处理mLineData中读到的行数据
}
mPcbFile.Close();//文件关闭
    写入数据(不带中文):
CStdioFile file;
file.Open(L"writetest.txt", CFile::modeCreate | CFile::modeWrite);//文件打开
CString str=L"asd\n";
file.WriteString(str);//写入行数据
file.WriteString(str);//写入行数据
file.Close();//文件关闭


由于字符集的影响,如果用的是unicode字符集,要用CStdioFile像上面那样来写入中文的话会出现问题,需要包含头文件locale.h,然后将上面带码修改如下:
CStdioFile file;
file.Open(L"writetest.txt", CFile::modeCreate | CFile::modeWrite);//文件打开
setlocale(LC_CTYPE, ("chs"));
CString str=L"啊哈哈哈哈哈\n";
file.WriteString(str);//写入行数据
file.WriteString(str);//写入行数据
file.Close();//文件关闭

编程技巧