1、前言



#include <fstream>
using namespace std;


文件操作对象:

ofstream

该数据类型表示输出文件流,用于创建文件并向文件写入信息。

ifstream

该数据类型表示输入文件流,用于从文件读取信息。

fstream

该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

 

2、文件打开模式

模式标志

描述

ios::app

追加模式。所有写入都追加到文件末尾。

ios::ate

文件打开后定位到文件末尾。

ios::in

打开文件用于读取。

ios::out

打开文件用于写入。

ios::trunc

如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

 

3、读文件

二进制文件:



std::ifstream srcfile;
srcfile.open(srcFileName, std::ios::in|std::ios::binary);
if(!srcfile){
zout << "src file open failed:"<<srcFileName;
return;
}

while(srcfile){
   char* pBufData = new char[C_BUFFER_SIZE]; //pBufData是从源文件里读取的指定大小的数据
srcfile.read(pBufData, C_BUFFER_SIZE);
int readSize = srcfile.gcount();
delete[] pBufData;
}


通过gcount();返回本地读取字节大小

文本文件:



void Config::_initRewriteLog()
{
std::fstream logFile;
logFile.open(m_reWriteLogPath/*, std::ios_base::in*/);
while(logFile){
char str[128];
logFile.getline(str, 128);
std::string lineStr(str);

if(""!=lineStr){
std::string key = lineStr.substr(0, lineStr.find(":"));
std::string value = lineStr.substr(lineStr.find(":")+1);
m_rewriteLog[key] = value;
}
}
logFile.close();
}


 

 

4、写文件

二进制文件:



std::ofstream targetFile;
char* a = new char[C_BUFFER_SIZE];
targetFile.open(newFileName, std::ios::out | std::ios::binary);
targetFile.write(a, C_BUFFER_SIZE);
targetFile.flush();


文本文件:



void Config::addHandledDirToLog(const std::string &dir, const std::string &time)
{
if(m_rewriteLog.find(dir) != m_rewriteLog.end()){
return;
}
std::string info = dir+":"+time+"\n";
m_rewriteLog[dir] = time;
std::ofstream logFile;
logFile.open(m_reWriteLogPath, std::ios_base::app);
logFile.write(info.c_str(), info.size());
logFile.close();
}


 

5、关闭文件



close();


 

 

 

 

附其他平台:

1、win32文件操作:

CreateFIle,WriteFile,ReadFile,CloseFile

2、MFC:

类:CFile

写:



CFile file("zz.txt",CFile::modeCreate|CFile::modeReadWrite);
file.Write("www.baidu.com",strlen("www.baidu.com"));
file.Close();


读:



CFile file("zz.txt",CFile::modeRead);
char *buf;
DWORD lenth=file.GetLength();
buf=new char[lenth+1];
buf[lenth]=0;
file.Read(buf,lenth);
MessageBox(buf);
file.Close();
delete buf;


文件对话框:

读:



CFileDialog filedialog(TRUE);
if(IDOK==filedialog.DoModal())
{
  CFile file(filedialog.GetPathName(),CFile::modeRead);
  char *buf;
  int lenth=file.GetLength();
  buf=new char[lenth+1];
  buf[lenth]=0;
  file.Read(buf,lenth);
  MessageBox(buf);
}


 




长风破浪会有时,直挂云帆济沧海!