MFC文件、文件夹操作整理

本文详细介绍了使用C/C++进行文件及目录的操作方法,包括文件的判断、日期操作、属性设置、复制移动删除及重命名等功能,同时涵盖了目录的创建、删除、判断存在性等实用技巧。
1、  判断文件是否存在

a)        利用CFile类和CFileStatus类判断

[c-sharp] view plain copy print ?
  1. CFileStatus filestatus;  
  2.   
  3. if (CFile::GetStatus(_T("d://softist.txt"), filestatus))  
  4.   
  5.     AfxMessageBox(_T("文件存在"));  
  6.   
  7. else  
  8.   
  9.     AfxMessageBox(_T("文件不存在"));  

b)        利用CFileFind类判断

[c-sharp] view plain copy print ?
  1. CFileFind filefind;  
  2.   
  3. CString strPathname = _T("d://softist.txt");  
  4.   
  5. if(filefind.FindFile(strPathname))  
  6.   
  7.     AfxMessageBox(_T("文件存在"));  
  8.   
  9. else  
  10.   
  11.     AfxMessageBox(_T("文件不存在"));  

c)        利用API函数FindFirstFile判断,这个函数还可以判断文件属性,日期,大小等属性。

[c-sharp] view plain copy print ?
  1. WIN32_FIND_DATA FindFileData;  
  2.   
  3.        HANDLE hFind;  
  4.   
  5.        hFind = FindFirstFile(_T("d://softist.txt"), &FindFileData);  
  6.   
  7.        if (hFind == INVALID_HANDLE_VALUE)   
  8.   
  9.        {  
  10.   
  11.               AfxMessageBox(_T("文件不存在"));  
  12.   
  13.        }   
  14.   
  15.        else   
  16.   
  17.        {  
  18.   
  19.               AfxMessageBox(_T("文件存在"));  
  20.   
  21.               FindClose(hFind);  
  22.   
  23.        }  

2、  文件日期操作。下面是取得"d://softist.txt"的文件修改时间,TRACE以后,再把文件修改时间改成 2000-12-03 12:34:56

[c-sharp] view plain copy print ?
  1.   HANDLE     hFile;  
  2.   
  3.      FILETIME   filetime;  
  4.   
  5.      FILETIME   localtime;  
  6.   
  7.      SYSTEMTIME systemtime;  
  8.   
  9.    
  10.   
  11.      hFile = CreateFile(_T("d://softist.txt"), GENERIC_READ | GENERIC_WRITE,    0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);  
  12.   
  13.      if (hFile != INVALID_HANDLE_VALUE)   
  14.   
  15.      {  
  16.   
  17.          GetFileTime(hFile, NULL, NULL, &filetime);      //取得UTC文件时间   
  18.   
  19.          FileTimeToLocalFileTime(&filetime, &localtime); //换成本地时间   
  20.   
  21.          FileTimeToSystemTime(&localtime, &systemtime);  //换成系统时间格式   
  22.   
  23.          TRACE("%04d-%02d-%02d %02d:%02d:%02d/r/n",  
  24.   
  25.               systemtime.wYear, systemtime.wMonth, systemtime.wDay,  
  26.   
  27.               systemtime.wHour, systemtime.wMinute, systemtime.wSecond);  
  28.   
  29.          //把文件时间修改成 2000-12-03 12:34:56   
  30.   
  31.          systemtime.wYear = 2000; systemtime.wMonth = 12; systemtime.wDay = 3;  
  32.   
  33.          systemtime.wHour = 12; systemtime.wMinute = 34; systemtime.wSecond = 56;  
  34.   
  35.          SystemTimeToFileTime(&systemtime, &localtime); //换成文件时间格式   
  36.   
  37.          LocalFileTimeToFileTime(&localtime, &filetime); //换成UTC时间   
  38.   
  39.          SetFileTime(hFile, NULL, NULL, &filetime);  //设定UTC文件时间   
  40.   
  41.          CloseHandle(hFile);  
  42.   
  43. }  

   3、  设置文件属性

[c-sharp] view plain copy print ?
  1. BOOL SetFileAttributes( LPCTSTR lpFileName, DWORD dwFileAttributes );  
  2.   
  3.    
  4.   
  5. dwFileAttributes 的意义:  
  6.   
  7. FILE_ATTRIBUTE_ARCHIVE 保存文件  
  8.   
  9. FILE_ATTRIBUTE_HIDDEN          隐藏文件  
  10.   
  11. FILE_ATTRIBUTE_NORMAL 通常文件  
  12.   
  13. FILE_ATTRIBUTE_READONLY    只读文件  
  14.   
  15. FILE_ATTRIBUTE_SYSTEM   系统文件  
  16.   
  17. 例:  
  18.   
  19. SetFileAttributes(_T("d://softist.txt", FILE_ATTRIBUTE_READONLY);  

4、  文件的复制,移动,删除,更名

⑴、             文件的复制API

[c-sharp] view plain copy print ?
  1. BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);  
  2.   
  3.    
  4.   
  5. bFailIfExists用来制定如果目标文件已经存在时,是否中止复制操作,返回FALSE。例,把"d://softist1.txt"复制到"d://softist2.txt",即使"d://softist2.txt"已经存在。  
  6.   
  7.    
  8.   
  9. BOOL bRet = CopyFile(_T("d://softist1.txt"), _T("d://softist2.txt"), FALSE);  

⑵、             文件的移动API

[c-sharp] view plain copy print ?
  1. BOOL MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName );  
  2.   
  3.    
  4.   
  5. 这个函数可以移一个文件,或目录(包括子目录),例:  
  6.   
  7. MoveFile(_T("d://softist.txt"), _T("e//softist2.txt"));//移动并改名  
  8.   
  9. 下面的API带着选项dwFlags ,移动文件,或目录(包括子目录)。  
  10.   
  11.    
  12.   
  13. BOOL MoveFileEx(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags );  
  14.   
  15. dwFlags的意义:  
  16.   
  17. MOVEFILE_REPLACE_EXISTING 如果目标文件存在是否替代它 。  
  18.   
  19. MOVEFILE_DELAY_UNTIL_REBOOT 文件移动准备,下次启动系统时执行移动作业。  

⑶、             删除文件

[c-sharp] view plain copy print ?
  1. API:  
  2.   
  3. BOOL DeleteFile( LPCTSTR lpFileName );  
  4.   
  5.    
  6.   
  7. 如:DeleteFile (_T("d://softist.txt"));  
  8.   
  9. MFC:  
  10.   
  11. static void PASCAL CFile::Remove(LPCTSTR lpszFileName);  

⑷、             文件更名MFC

[c-sharp] view plain copy print ?
  1. TCHAR* pOldName = _T("Oldname_File.dat");  
  2.   
  3. TCHAR* pNewName = _T("Renamed_File.dat");  
  4.   
  5. try  
  6.   
  7. {  
  8.   
  9.     CFile::Rename(pOldName, pNewName);  
  10.   
  11. }  
  12.   
  13. catch(CFileException* pEx )  
  14.   
  15. {  
  16.   
  17.     TRACE(_T("File %20s not found, cause = %d/n"), pOldName, pEx->m_cause);  
  18.   
  19.     pEx->Delete();  
  20.   
  21. }  

5、  文件目录操作

⑴、           创建目录:

[c-sharp] view plain copy print ?
  1. BOOL CreateDirectory(LPCTSTR pstrDirName);//pstrDirName是全路径   
  2.   
  3.    
  4.   
  5. SECURITY_ATTRIBUTES  attribute;  
  6.   
  7.       attribute.nLength = sizeof(attribute);  
  8.   
  9.       attribute.lpSecurityDescriptor = NULL;  
  10.   
  11.       attribute.bInheritHandle = FALSE;  
  12.   
  13.       //创建   
  14.   
  15.       if(CreateDirectory("d://NewFolder",&attribute) == 0)  
  16.   
  17.              AfxMessageBox("创建失败!");  

⑵、           删除目录:

[c-sharp] view plain copy print ?
  1. BOOL RemoveDirectory( LPCTSTR lpPathName );  

⑶、           判断目录是否存在(Shell Function

[c-sharp] view plain copy print ?
  1. #include <shlwapi.h>  
  2.  
  3.        #pragma comment(lib, "shlwapi.lib")    
  4.   
  5.        ...  
  6.   
  7.        if (PathIsDirectory(_T("d://temp")))   
  8.   
  9.               AfxMessageBox(_T("存在"));  
  10.   
  11.        else   
  12.   
  13. AfxMessageBox(_T("不存在"));  

⑷、           取得当前目录(API)

[c-sharp] view plain copy print ?
  1. DWORD GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer );  

⑸、           取得执行文件所在目录(API)

[c-sharp] view plain copy print ?
  1. DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize );  

⑹、           取得功能目录(Shell Function

[c-sharp] view plain copy print ?
  1. BOOL SHGetSpecialFolderPath( HWND hwndOwner,  LPTSTR lpszPath, int nFolder, BOOL fCreate);  
  2.   
  3.    
  4.   
  5. 例:读取我的档案目录  
  6.   
  7.     TCHAR szDirFile[1024];  
  8.   
  9.     memset(szDirFile, 0, sizeof(szDirFile));  
  10.   
  11.     BOOL bRet = SHGetSpecialFolderPath(NULL,szDirFile,CSIDL_PERSONAL,true);  
  12.   
  13.     if (bRet)  
  14.   
  15.     {  
  16.   
  17.         AfxMessageBox(szDirFile);  
  18.   
  19.     }  

⑺、           选择目录用的对话框界面

利用Shell Function可以打出选择目录用的对话框界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值