C++文件操作

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);
}

 

posted @ 2016-09-26 19:59  朱小勇  阅读(298)  评论(0编辑  收藏  举报