1.创建文件夹
CreateDirectory(%%1,NULL);
2.创建文件
CFile file;
file.Open(%%1,CFile::modeCreate|CFile::modeWrite);
3.删除文件
DeleteFile(%%1);
4.删除文件夹
RemoveDirectory(%%1);
5.删除一个目录下所有的文件夹
CFileFind finder;
BOOL bWorking = finder.FindFile(%%1+"//*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDirectory())
{
RemoveDirectory(finder.GetFilePath());
}
}
6.清空文件夹
RemoveDirectory(%%1);
CreateDirectory(%%1,NULL);
7.读取文件
char sRead[1024];
CFile mFile(_T(%%1),CFile::modeRead);
while (sRead!=null)
{
mFile.Read(sRead,1024);
CString %%2(sRead);
%%3
}
MFC文件操作大全 | |
|
|
|
2 | 回复:MFC文件操作大全 |
8.写入文件
CFile mFile(_T(%%1), CFile::modeWrite|CFile::modeCreate); mFile.Write(%%2,sizeof(%%2)); mFile.Flush(); mFile.Close(); 9.写入随机文件 char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH]; GetTempPath(_MAX_PATH, szTempPath); GetTempFileName(szTempPath,_T ("my_"),0,szTempfile); CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite); char m_char='a'; m_tempFile.Write(&m_char,2); m_tempFile.Close(); //循环写入多个值 strTempA; int i; int nCount=6; //共有6个文件名需要保存 for (i=0;i{strTemp.Format("%d",i); strTempA=文件名; //文件名可以从数组,列表框等处取得. ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA, c://usefile//usefile.ini); } strTemp.Format("%d",nCount); ::WritePrivateProfileString("FileCount","Count",strTemp,"c://usefile//usefile.ini"); //将文件总数写入,以便读出. //读出 nCount=::GetPrivateProfileInt("FileCount","Count",0,"c://usefile//usefile.ini"); for(i=0;i{strTemp.Format("%d",i); strTemp="FileName"+strTemp; ::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c://usefile//usefile.ini"); //使用strTempA中的内容. } 10.读取文件属性 dwAttrs = GetFileAttributes(%%1); if (dwAttrs & FILE_ATTRIBUTE_READONLY) { %%2 } if (NORMAL & FILE_ATTRIBUTE_READONLY){ %%3 } 11.写入属性 SetFileAttributes(szNewPath,dwAttrs | FILE_ATTRIBUTE_READONLY); 12.枚举一个目录下所有文件夹 CFileFind finder; BOOL bWorking = finder.FindFile(%%1+"//*.*"); while (bWorking) { bWorking = finder.FindNextFile(); if(finder.IsDirectory()){ CString %%1=finder.GetFilePath(); %%2 } } 13.复制文件夹 WIN32_FIND_DATA FileData; HANDLE hSearch; DWORD dwAttrs; char szDirPath[] = %%2; char szNewPath[MAX_PATH]; char szHome[MAX_PATH]; BOOL fFinished = FALSE; if (!CreateDirectory(szDirPath, NULL)) { //不能创建新的目录 return; } hSearch = FindFirstFile(%%1+"//*.*", &FileData); if (hSearch == INVALID_HANDLE_VALUE) { return; } while (!fFinished) { | |
|
|
|
3 | 回复:MFC文件操作大全 |
lstrcpy(szNewPath, szDirPath);
lstrcat(szNewPath, FileData.cFileName); if (CopyFile(FileData.cFileName, szNewPath, FALSE)) { dwAttrs = GetFileAttributes(FileData.cFileName); if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) { SetFileAttributes(szNewPath, dwAttrs | FILE_ATTRIBUTE_READONLY); } } else { //不能复制文件 return; } if (!FindNextFile(hSearch, &FileData)) { if (GetLastError() == ERROR_NO_MORE_FILES) { //遍历文件夹完成 fFinished = TRUE; } else { //找不到下一个文件 return; } } } FindClose(hSearch); 14.复制一个目录下所有的文件夹到另一个文件夹下 WIN32_FIND_DATA FileData; HANDLE hSearch; DWORD dwAttrs; char szDirPath[] = %%2; char szNewPath[MAX_PATH]; char szHome[MAX_PATH]; BOOL fFinished = FALSE; if (!CreateDirectory(szDirPath,NULL)) { //不能创建新的目录 return; } BOOL bWorking = finder.FindFile(%%1+"//*.*"); while (bWorking) { bWorking = finder.FindNextFile(); if(finder.IsDirectory()){ hSearch = FindFirstFile(finder.GetFilePath()+"//*.*", &FileData); if (hSearch == INVALID_HANDLE_VALUE) { return; } while (!fFinished) { lstrcpy(szNewPath, szDirPath); lstrcat(szNewPath, FileData.cFileName); if (CopyFile(FileData.cFileName, szNewPath, FALSE)) { dwAttrs = GetFileAttributes(FileData.cFileName); if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) { SetFileAttributes(szNewPath, dwAttrs | FILE_ATTRIBUTE_READONLY); } } else { //不能复制文件 return; } if (!FindNextFile(hSearch, &FileData)) { if (GetLastError() == ERROR_NO_MORE_FILES) { //遍历文件夹完成 fFinished = TRUE; } else { //找不到下一个文件 return; } } } FindClose(hSearch); } } 15.移动文件夹 WIN32_FIND_DATA FileData; HANDLE hSearch; DWORD dwAttrs; char szDirPath[] = %%2; char szNewPath[MAX_PATH]; char szHome[MAX_PATH]; BOOL fFinished = FALSE; if (!CreateDirectory(szDirPath, NULL)) { //不能创建新的目录 return; } hSearch = FindFirstFile(%%1+"//*.*", &FileData); if (hSearch == INVALID_HANDLE_VALUE) { return; } while (!fFinished) { lstrcpy(szNewPath, szDirPath); lstrcat(szNewPath, FileData.cFileName); if (CopyFile(FileData.cFileName, szNewPath, FALSE)) { dwAttrs = GetFileAttributes(FileData.cFileName); if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) { SetFileAttributes(szNewPath, dwAttrs | FILE_ATTRIBUTE_READONLY); } } else { //不能复制文件 return; } if (!FindNextFile(hSearch, &FileData)) { if (GetLastError() == ERROR_NO_MORE_FILES) { //遍历文件夹完成 fFinished = TRUE; } else { //找不到下一个文件 return; } } } FindClose(hSearch); RemoveDirectory(%%1); | |
|
|
|
4 | 回复:MFC文件操作大全 |
16.移动一个文件夹下所有的文件夹到另一个目录下
WIN32_FIND_DATA FileData; HANDLE hSearch; DWORD dwAttrs; char szDirPath[] = %%2; char szNewPath[MAX_PATH]; char szHome[MAX_PATH]; BOOL fFinished = FALSE; if (!CreateDirectory(szDirPath,NULL)) { //不能创建新的目录 return; } BOOL bWorking = finder.FindFile(%%1+"//*.*"); while (bWorking) { bWorking = finder.FindNextFile(); if(finder.IsDirectory()){ hSearch = FindFirstFile(finder.GetFilePath()+"//*.*", &FileData); if (hSearch == INVALID_HANDLE_VALUE) { return; } while (!fFinished) { lstrcpy(szNewPath, szDirPath); lstrcat(szNewPath, FileData.cFileName); if (CopyFile(FileData.cFileName, szNewPath, FALSE)) { dwAttrs = GetFileAttributes(FileData.cFileName); if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) { SetFileAttributes(szNewPath, dwAttrs | FILE_ATTRIBUTE_READONLY); } } else { //不能复制文件 return; } if (!FindNextFile(hSearch, &FileData)) { if (GetLastError() == ERROR_NO_MORE_FILES) { //遍历文件夹完成 fFinished = TRUE; } else { //找不到下一个文件 return; } } } FindClose(hSearch); RemoveDirectory(finder.GetFilePath().GetBuffer(0)); } } 17.以一个文件夹的框架在另一个目录创建文件夹和空文件 WIN32_FIND_DATA FileData; HANDLE hSearch; DWORD dwAttrs; char szDirPath[] = %%2; char szNewPath[MAX_PATH]; char szHome[MAX_PATH]; BOOL fFinished = FALSE; if (!CreateDirectory(szDirPath, NULL)) { //不能创建新的目录 return; } hSearch = FindFirstFile(%%1+"//*.*", &FileData); if (hSearch == INVALID_HANDLE_VALUE) { return; } while (!fFinished) { lstrcpy(szNewPath, szDirPath); lstrcat(szNewPath, FileData.cFileName); HANDLE hFile=CreateFileHandle hFile=CreateFile(szNewPath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL); if(!hFile) { //不能创建文件 return; } if (!FindNextFile(hSearch, &FileData)) { if (GetLastError() == ERROR_NO_MORE_FILES) { //遍历文件夹完成 fFinished = TRUE; } else { //找不到下一个文件 return; } } } FindClose(hSearch); 18.复制文件 CopyFile(%%1,%%2,true); | |
|
|
|
5 | 回复:MFC文件操作大全 |
19.复制一个文件夹下所有的文件到另一个目录
//#include <string> using std::string; char sep='/'; #ifdef _WIN32 sep='//'; #endif CFileFind finder; BOOL bWorking = finder.FindFile(%%1+"//*.*"); while (bWorking) { bWorking = finder.FindNextFile(); if(!finder.IsDirectory() || finder.IsDots()){ string s(finder.GetFileName()); CString sourcefile(%%1); if(s.rfind(sep,s.length())!=string::npos) { sourcefile=sourcefile+"//"+s.substr(i+1,s.length()-i); CString targetfile(s.substr(i+1,s.length()-i)); targetfile=%%2+"//"+targetfile/; CopyFile(sourcefile.GetBuffer(0),targetfile.GetBuffer(0),true); } } } 20.提取扩展名 CString path(%%1); CString %%2=path.Mid(path.ReverseFind('.')); 21.提取文件名 CString path(%%1); CString %%2=path.Mid(path.ReverseFind('//')+1); 22.提取文件路径 char appName[MAX_PATH]; GetModualFileName(NULL,appName,MAX_PATH); | |
|
|
|
6 | 回复:MFC文件操作大全 |
23.替换扩展名
//#include <string> using std::string; string s(%%1); string newExt(%%2); string::size_type i=s.rfind('.',s.length()); if(i!=string::npos) s.replace(i+1,newExt.length(),newExt); CString %%3(s); 24.追加路径 /* #include <string> #include <cstdlib> #include <boost/filesystem/operations.hpp> #include <boost/filesystem/fstream.hpp> */ using namespace std; using namespace boost::filesystem; try { path p1=complete(path(%%2,native), path(%%1,native)); path p2=system_complete(path(%%2,native)); CString %%3(p3); } catch(exception& e){ //e.what(); } 25.移动文件 MoveFile(%%1,%%2); | |
|
|
|
7 | 回复:MFC文件操作大全 |
26.移动一个文件夹下所有文件到另一个目录
//#include <string> using std::string; char sep='/'; #ifdef _WIN32 sep='//'; #endif CFileFind finder; BOOL bWorking = finder.FindFile(%%1+"//*.*"); while (bWorking) { bWorking = finder.FindNextFile(); if(!finder.IsDirectory() || finder.IsDots()){ string s(finder.GetFileName()); CString sourcefile(%%1); if(s.rfind(sep,s.length())!=string::npos) { sourcefile=sourcefile+"//"+s.substr(i+1,s.length()-i); CString targetfile(s.substr(i+1,s.length()-i)); targetfile=%%2+"//"+targetfile/; MoveFile(sourcefile.GetBuffer(0),targetfile.GetBuffer(0),true); } } } 27.指定目录下搜索文件 CString strFileTitle; CFileFind finder; BOOL bWorking = finder.FindFile ("C://windows//sysbkup//*.cab"); while(bWorking) { bWorking=finder.FindNextFile(); strFileTitle=finder.GetFileTitle(); } | |
|
|
|
8 | 回复:MFC文件操作大全 |
28.打开对话框
CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files (*.*)|*.*||",AfxGetMainWnd()); CString str(" ",10000); mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000); str.ReleaseBuffer(); POSITION mPos=mFileDlg.GetStartPosition(); CString pathName(" ",128); CFileStatus status; while(mPos!=NULL) { pathName=mFileDlg.GetNextPathName(mPos); CFile::GetStatus( pathName, status ); } 29.文件分割 CFile m_File; CString m_Filename,m_FileTitle,m_FilePath; m_FileName=%%1; char pBuf[4096]; if(m_File.Open(m_FileName,CFile::modeRead | CFile::shareDenyWrite)) { m_FileName=m_File.GetPathName(); m_FileTitle=m_File.GetFileTitle(); DWORD FileLength=m_File.GetLength(); DWORD PartLength=FileLength/2+FileLength%2; int nCount=1; CString strName; CFile wrFile; DWORD ReadBytes; while(true) { ReadBytes=m_File.Read(pBuf,PartLength); strName.Format("%s%d",m_FIleTitle,nCount); wrFile.Open(strName,CFile::modeWrite | CFile::modeCreate); wrFile.Write(pBuf,ReadBytes); wrFile.Close(); if(ReadBytes<PartLength) break; nCount++; } m_File.Close(); } else AfxMessageBox("不能打开文件"); | |
|
|
|
9 | 回复:MFC文件操作大全 |
30.文件合并
//#include <string> using std::string; string s(%%1); char sep='/'; #ifdef _WIN32 sep='//'; #endif size_t sz=s.rfind(sep,s.length()); if(sz!=string::npos) { CFile Out; CString strFilename(s.substr(i+1,s.length()-i)); if(Out.Open(%%2+"//"+strfilename,cfile::modewrite%7ccfile::modecreate)){ for(int i=1;i<=2;i++) { String Filename=%%%2+"//"+strfilename+atoi(i); CFile In; if(In.Open(Filename,CFile::modeRead)){ char cbBuffer[4096]; int nFilesize=In.GetLength(); while(nFilesize>0){ int nSize=sizeof(cbBuffer); if(nSize>nFilesize) nSize=nFilesize; try{ In.Read(cbBuffer,nSize); } catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return; } try{ Out.Write(cbBuffer,nSize); } catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return; } nFilesize=nSize; } } else AfxMessageBox("不能打开"+Filename); } } else AfxMessageBox("不能创建输出文件"); } | |
|
|
|
10 | 回复:MFC文件操作大全 |
31.文件简单加密
//#include <string> using std::string; string s(%%1); char sep='/'; #ifdef _WIN32 sep='//'; #endif size_t sz=s.rfind(sep,s.length()); if(sz!=string::npos) { CFile Out,In; int nFIlesize; char *lpMsgBuf; CString strFilename(s.substr(i+1,s.length()-i)); if(!in.Open(%%1,CFile::modeRead)){ //不能打开输入文件 return; } if(!Out.Open(%%2+"//enc_%22+strfilename,cfile::modewrite/ | CFile::modeCreate)){ //不能打开输出文件 return; } nFilesize=In.GetLength(); lpBuffer=new char[nFilesize]; if(lpBuffer==NULL){ //不能分配复制缓存 return; } CFileStatus rStatus; In.GetStatus(%%1,rStatus); try{ In.Read(cbBuffer,nFilesize); } catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return; } for(int i=0;i<nFilesize;i++) { int ibt=lpBuffer[i]; ibt+=100; ibt%=256; bpBuffer[i]=(char)ibt; } try{ Out.Write(cbBuffer,nFilesize); } catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return; } Out.Close(); //In.Close(); CFile::SetStatus(%%2+"//enc_%22+strfilename,rstatus); delete[] lpBuffer; } | |
|
|
|
11 | 回复:MFC文件操作大全 |
32.文件简单解密
//#include <string> using std::string; string s(%%1); char sep='/'; #ifdef _WIN32 sep='//'; #endif size_t sz=s.rfind(sep,s.length()); if(sz!=string::npos) { CFile Out,In; int nFIlesize; char *lpMsgBuf; CString strFilename(s.substr(i+1,s.length()-i)); if(!in.Open(%%2+"//enc_%22+strfilename,cfile::moderead)){ //不能打开输入文件 return; } if(!Out.Open(%%1,CFile::modeWrite | CFile::modeCreate)){ //不能打开输出文件 return; } nFilesize=In.GetLength(); lpBuffer=new char[nFilesize]; if(lpBuffer==NULL){ //不能分配复制缓存 return; } CFileStatus rStatus; In.GetStatus(%%2+"//enc_%22+strfilename,rstatus); try{ In.Read(cbBuffer,nFilesize); } catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return; } for(int i=0;i<nFilesize;i++) { int ibt=lpBuffer[i]; ibt-=100;ibt+=256; ibt%=256; bpBuffer[i]=(char)ibt; } try{ Out.Write(cbBuffer,nFilesize); } catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return; } Out.Close(); //In.Close(); CFile::SetStatus(%%1,rStatus); delete[] lpBuffer; } | |
|
|
|