#include "StdAfx.h" #include "FileMgr.h" #include "LogMgr.h" #include "GlobalDefine.h" CFileMgr::CFileMgr(void) { } CFileMgr::~CFileMgr(void) { } //以当前程序目录为基础,获取文件的完整路径(放在FilePath 中) void CFileMgr::GetFullFilePath(char *FilePath,CString FileName) { CString str; GetFullFilePath(str,FileName); strcpy(FilePath,(LPSTR)(LPCTSTR)str); } //以当前程序目录为基础,获取文件的完整路径(FileName 格式类似于\\Debug.txt) void CFileMgr::GetFullFilePath(CString &FilePath,CString FileName) { CString sPath; GetModuleFileName(NULL,sPath.GetBufferSetLength(1023),1024); sPath.ReleaseBuffer(); int nPos; nPos = sPath.ReverseFind('\\'); sPath = sPath.Left(nPos); FilePath = sPath + FileName; } //获取当前工作目录 CString CFileMgr::GetWorkPath() { CString sPath; GetModuleFileName(NULL,sPath.GetBufferSetLength(1023),1024); sPath.ReleaseBuffer(); int nPos; nPos = sPath.ReverseFind('\\'); sPath = sPath.Left(nPos); return sPath; } #if 1 //按行读取FilePath 指定的文件,保存到vec 中(FilePath 是程序根目录下的文件路径) void CFileMgr::ReadFileToStringVec(const CString &FilePath,vector &vec) { CStdioFile file; if(file.Open(FilePath,CFile::modeRead,NULL)) { CString str; while(file.ReadString(str)) { vec.push_back(str); } file.Close(); } } //读取文件的每一行,以逗号分离数值 void CFileMgr::ReadFileToDoubleVec(const CString &FilePath,vector> &Vec) { //提取每一行字符串 vector StrVec; ReadFileToStringVec(FilePath,StrVec); vector::iterator iter = StrVec.begin(); vector::iterator iter_end = StrVec.end(); for(;iter!=iter_end;iter++) { vector VecTmp; //从str 中提取double 数值,以逗号作为分隔符 GetDoubleVal((*iter),VecTmp); if(VecTmp.empty()==false) Vec.push_back(VecTmp); } } //从str 中提取double 数值,以逗号作为分隔符 void CFileMgr::GetDoubleVal(CString Str,vector &Vec) { int CommaPosPer;//第一个逗号的位置 CommaPosPer = Str.Find(",",0); if(CommaPosPer == -1)//没找到直接返回 { return; } char *recvBuf = Str.GetBuffer(); //第一个值 double val = 0; CString Str1(recvBuf,CommaPosPer); val= atof(Str1); Vec.push_back(val); int idx = 0; int CommaPosNext = CommaPosPer; do { CommaPosNext = Str.Find(",",CommaPosPer+1);//下一个逗号的位置 if(CommaPosNext==-1)//最后一个 { CString Str1(recvBuf+CommaPosPer+1); val= atof(Str1); } else { CString Str1(recvBuf+CommaPosPer+1,CommaPosNext-CommaPosPer); val= atof(Str1); } Vec.push_back(val); CommaPosPer = CommaPosNext; idx++; }while(CommaPosNext!=-1); } //将一个坐标容器写入到文本文件 void CFileMgr::WriteDbxyVecToFile(vector &vec,ofstream *file) { vector::iterator iter = vec.begin(); vector::iterator iter_end = vec.end(); for(;iter!=iter_end;iter++) { (*file)<<(*iter).x<<","<<(*iter).y<& Vec,CString Suffix) { CString strFilePath; int dwDirSize = 0; strFilePath += strPath; strFilePath += "//*.*"; CFileFind finder; BOOL bFind = finder.FindFile(strFilePath); while (bFind) { bFind = finder.FindNextFile(); if (!finder.IsDots()) { CString strTempPath = finder.GetFilePath(); if(bDir && finder.IsDirectory()) { Vec.push_back(strTempPath); } else if(!bDir) { if(Suffix != "")//指定了后缀 { if(strTempPath.Find(Suffix)!=-1) Vec.push_back(strTempPath); } else { Vec.push_back(strTempPath); } } } } finder.Close(); } //删除指定目录下的所有文件 void CFileMgr::DeleteDirFile(CString FilePath) { CString DelStr("del /s/q "); DelStr += FilePath; system(DelStr); } //删除目录 void CFileMgr::DeleteDir(CString DirPath) { CString DelStr("rmdir "); DelStr += DirPath; system(DelStr); } //创建目录 void CFileMgr::CreatDir(CString DirPath) { CString MkdirCmd("mkdir "); MkdirCmd += DirPath; system(MkdirCmd); } //将Path1 的所有文件copy 到Path2 void CFileMgr::CopyFile(CString Path1,CString Path2) { CString MoveFileCmd("copy "); MoveFileCmd += Path1+" "+Path2; system(MoveFileCmd); } //从路径中提取文件名(bDelSuffix 去掉后缀) CString CFileMgr::GetFileNameFromPath(CString Path,bool bDelSuffix) { CString name = Path; int idx = name.ReverseFind('\\'); if(idx != -1) { int len = name.GetLength(); name = name.Right(len - idx -1); } if(bDelSuffix) { idx = name.ReverseFind('.'); if(idx != -1) { int len = name.GetLength(); name = name.Left(len - (len-idx)); } } return name; }