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);
}
长风破浪会有时,直挂云帆济沧海!