合并文件
void OpMergerFile(string readpath, string writepath) { // char cline; // ifstream ifile; // ofstream ofile; // if (_access(readpath.c_str(), 0) == 0) { //#ifdef WIN32 // ifile.open(readpath, ios::binary | ios::in); //读写都要以二进制形式,否则遇到/0就认为结束 // ofile.open(writepath, ios::binary | ios::app); //#else // ifile.open(readpath, ios::binary); // ofile.open(writepath, fstream::app); //#endif // WIN32 // while (ifile.get(cline)) // ofile << cline; // // ifile.close(); // ofile.close(); //} char c; FILE* rfp, *wfp; fopen_s(&rfp, readpath.c_str(), "rb");
fopen_s(&wfp, writepath.c_str(), "a+b");
fseek(wfp, 0, SEEK_END);
while (fread(&c, 1, 1, rfp))
fwrite(&c, 1, 1, wfp);
fclose(rfp); fclose(wfp);
return; }
替换文件
void OpReplaceFile(string readpath,string writepath) { char cline; ifstream ifile; ofstream ofile; if (IfFileExist(readpath.c_str()) && IfFileExist(writepath.c_str())) { #ifdef WIN32 ifile.open(readpath, ios::binary); ofile.open(writepath, ios::binary); #else ifile.open(readpath); ofile.open(writepath); #endif // WIN32 while(ifile.get(cline)) ofile << cline; ifile.close(); ofile.close(); } return; }
拼接文件(保留其中一个文件不变)
void ToRightMergerFile(string MergerFilepath,string HoleFilePath) { std::string tmp = "./intertemp"; MergerFile(HoleFilePath, tmp); MergerFile(MergerFilepath,tmp); OpReplaceFile(tmp, MergerFilepath); remove(tmp.c_str()); }
获取文件大小
long GetFileLength(const std::string filepath) { long LocalFilelen = 0; FILE* pfile; #ifdef WIN32 if (fopen_s(&pfile, filepath.c_str(), "r") != 0) return 0; if(pfile) { fseek(pfile, 0, SEEK_SET); fseek(pfile, 0, SEEK_END); LocalFilelen = ftell(pfile); } #else pfile = fopen(filepath.c_str(), "r"); if(pfile) { fseek(pfile, 0, SEEK_SET); fseek(pfile, 0, SEEK_END); LocalFilelen = ftell(pfile); } #endif fclose(pfile); pfile = NULL; return LocalFilelen;