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); }
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html