MFC 文件,文件夹操作
来源:互联网 发布:手机dlna软件 编辑:程序博客网 时间:2024/05/29 12:35
VC++ MFC文件,文件夹操作整理
文件属性相关
1.判断文件是否存在
利用CFile类和CFileStatus类判断
CFileStatus filestatus;if (CFile::GetStatus(_T("d://softist.txt"), filestatus)) AfxMessageBox(_T("文件存在"));else AfxMessageBox(_T("文件不存在"));
利用CFileFind类判断
CFileFind filefind;CString strPathname = _T("d://softist.txt");if(filefind.FindFile(strPathname)) AfxMessageBox(_T("文件存在"));else AfxMessageBox(_T("文件不存在"));
利用API函数FindFirstFile判断,这个函数还可以判断文件属性,日期,大小等属性。例:
WIN32_FIND_DATA FindFileData;HANDLE hFind;hFind = FindFirstFile(_T("d://softist.txt"), &FindFileData);if (hFind == INVALID_HANDLE_VALUE) { AfxMessageBox(_T("文件不存在"));} else { AfxMessageBox(_T("文件存在")); FindClose(hFind);}
2.文件日期操作。下面是取得"d://softist.txt"的文件修改时间,TRACE以后,再把文件修改时间改成 2000-12-03 12:34:56。
HANDLE hFile;FILETIME filetime;FILETIME localtime;SYSTEMTIME systemtime; hFile = CreateFile(_T("d://softist.txt"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE){ GetFileTime(hFile, NULL, NULL, &filetime); //取得UTC文件时间 FileTimeToLocalFileTime(&filetime, &localtime); //换成本地时间 FileTimeToSystemTime(&localtime, &systemtime); //换成系统时间格式 TRACE("%04d-%02d-%02d %02d:%02d:%02d/r/n", systemtime.wYear, systemtime.wMonth, systemtime.wDay, systemtime.wHour, systemtime.wMinute, systemtime.wSecond); //把文件时间修改成 2000-12-03 12:34:56 systemtime.wYear = 2000; systemtime.wMonth = 12; systemtime.wDay = 3; systemtime.wHour = 12; systemtime.wMinute = 34; systemtime.wSecond = 56; SystemTimeToFileTime(&systemtime, &localtime); //换成文件时间格式 LocalFileTimeToFileTime(&localtime, &filetime); //换成UTC时间 SetFileTime(hFile, NULL, NULL, &filetime); //设定UTC文件时间 CloseHandle(hFile);}
3.设置文件属性
BOOL SetFileAttributes( LPCTSTR lpFileName, DWORD dwFileAttributes );dwFileAttributes 的意义FILE_ATTRIBUTE_ARCHIVE 保存文件FILE_ATTRIBUTE_HIDDEN 隐藏文件FILE_ATTRIBUTE_NORMAL 通常文件FILE_ATTRIBUTE_READONLY 只读文件FILE_ATTRIBUTE_SYSTEM 系统文件
例:
SetFileAttributes(_T("d://softist.txt", FILE_ATTRIBUTE_READONLY);
文件的复制,移动,删除,更名
1.文件的复制API
BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);
bFailIfExists用来制定如果目标文件已经存在时,是否中止复制操作,返回FALSE。例,把"d://softist1.txt"复制到"d://softist2.txt",即使"d://softist2.txt"已经存在。
BOOL bRet = CopyFile(_T("d://softist1.txt"), _T("d://softist2.txt"), FALSE);
2.文件的移动API
BOOL MoveFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName );
这个函数可以移一个文件,或目录(包括子目录),例
MoveFile(_T("d://softist.txt"), _T("d://softist2.txt"));
下面的API带着选项dwFlags ,移动文件,或目录(包括子目录)。
BOOL MoveFileEx( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags );
dwFlags的意义:
MOVEFILE_REPLACE_EXISTING 如果目标文件存在是否替代它 。
MOVEFILE_DELAY_UNTIL_REBOOT 文件移动准备,下次启动系统时执行移动作业。
3.删除文件
API:
BOOL DeleteFile( LPCTSTR lpFileName );MFC:
static void PASCAL CFile::Remove(LPCTSTR lpszFileName);4.文件更名MFC:
TCHAR* pOldName = _T("Oldname_File.dat");TCHAR* pNewName = _T("Renamed_File.dat");try{ CFile::Rename(pOldName, pNewName);}catch(CFileException* pEx ){ TRACE(_T("File %20s not found, cause = %d/n"), pOldName, pEx->m_cause); pEx->Delete();}
遍历文件目录
遍历文件目录,即把一个目录里的文件以及子目录里的文件名都取出来。本文是CFileFind类的使用例的笔记。下面的程序是从一个目录出发,把这个目录里的所有成员按着层次TRACE到DEBUG输出画面。
void TravelFolder(CString strDir, int nDepth){ CFileFind filefind; //声明CFileFind类型变量 CString strWildpath = strDir + _T("//*.*"); //所有文件都列出。 if(filefind.FindFile(strWildpath, 0)) //开始检索文件 { BOOL bRet = TRUE; while(bRet) { bRet = filefind.FindNextFile(); //枚举一个文件 if(filefind.IsDots()) //如果是. 或 .. 做下一个 continue; for (int i = 0; i < nDepth; i ++) //层次空格打印 { TRACE(_T(" ")); } if(!filefind.IsDirectory()) //不是子目录,把文件名打印出来 { CString strTextOut = strDir + CString(_T("//")) + filefind.GetFileName(); TRACE(_T("file = %s/r/n"), strTextOut); } else //如果是子目录,递归调用该函数 { CString strTextOut = strDir + CString(_T("//")) + filefind.GetFileName(); TRACE(_T("dir = %s/r/n"), strTextOut); TravelFolder(strTextOut, nDepth + 1);//递归调用该函数打印子目录里的文件 } } filefind.Close(); }}//测试,把d盘的/temp里的所有文件和子目录打印到DEBUG输出画面。void Test(){ TravelFolder(CString(_T("d://temp")), 0);}
文件目录操作
1.创建目录(API)
BOOL CreateDirectory(LPCTSTR pstrDirName);//pstrDirName是全路径
2.删除目录(API)
BOOL RemoveDirectory( LPCTSTR lpPathName );
3.判断目录是否存在(Shell Function)
#include <shlwapi.h>#pragma comment(lib, "shlwapi.lib") if (PathIsDirectory(_T("d://temp"))) AfxMessageBox(_T("存在"));else AfxMessageBox(_T("不存在"));
4.取得当前目录(API)
DWORD GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer );
5.取得执行文件所在目录(API)
DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize );
6.取得功能目录(Shell Function)
BOOL SHGetSpecialFolderPath( HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate);
例:读取我的档案目录
TCHAR szDirFile[1024]; memset(szDirFile, 0, sizeof(szDirFile)); BOOL bRet = SHGetSpecialFolderPath(NULL,szDirFile,CSIDL_PERSONAL,true); if (bRet) { AfxMessageBox(szDirFile); }
7.选择目录用的对话框界面
利用Shell Function可以打出选择目录用的对话框界面
#include<shlobj.h>INT CALLBACK _BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM pData){ TCHAR szDir[MAX_PATH]; switch(uMsg) { case BFFM_INITIALIZED: // WParam is TRUE since you are passing a path. // It would be FALSE if you were passing a pidl. SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData); break; case BFFM_SELCHANGED: // Set the status window to the currently selected path. if (SHGetPathFromIDList((LPITEMIDLIST)lParam ,szDir)) { SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir); } break; } return 0;} CString GetFolderFullpath(LPCTSTR lpszDefault){ TCHAR buffDisplayName[MAX_PATH]; TCHAR fullpath[MAX_PATH]; BROWSEINFO browseinfo; LPITEMIDLIST lpitemidlist; ZeroMemory(&browseinfo, sizeof( BROWSEINFO )); browseinfo.pszDisplayName = buffDisplayName ; browseinfo.lpszTitle = _T("请选择目录"); browseinfo.ulFlags = BIF_RETURNONLYFSDIRS; browseinfo.lParam = (LPARAM)lpszDefault; browseinfo.lpfn = _BrowseCallbackProc; if(!(lpitemidlist = SHBrowseForFolder(&browseinfo))) { AfxMessageBox(_T("没有选择目录")); return CString(_T("")); } else { SHGetPathFromIDList(lpitemidlist, fullpath); CoTaskMemFree(lpitemidlist); return CString(fullpath); }} void CTest77Dlg::OnBnClickedButton1(){ CString strFolderFullpath = GetFolderFullpath(_T("d://Temp")); if (strFolderFullpath != _T("")) AfxMessageBox(strFolderFullpath);}
- MFC 文件,文件夹操作
- MFC 文件,文件夹操作
- MFC 文件,文件夹操作
- MFC文件、文件夹操作
- MFC 文件,文件夹操作
- MFC 文件,文件夹操作
- MFC 文件,文件夹操作
- mfc 文件 文件夹操作大全
- MFC文件、文件夹操作整理
- MFC 中打开 文件,文件夹,以及删除文件,文件夹操作
- VC++ MFC文件,文件夹操作整理
- VC++ MFC文件,文件夹操作整理
- VC MFC 文件文件夹操作整理
- VC++ MFC文件,文件夹操作整理
- VC++ MFC文件,文件夹操作整理
- MFC 文件与文件夹相关操作
- MFC 对文件以及文件夹操作
- MFC学习笔记之:MFC文件、文件夹操作完全整理
- Ansi与Unicode
- hdu-2019-数列有序!
- 第五节cocos2dx的jni部分
- NDK jni 加载静态库
- Hibernate one-to-many many-to-one 双向关联
- MFC 文件,文件夹操作
- hadoop job初始化源码浅析
- Android应用程序需不需要手动退出?
- DX窗口创建和初始化
- 做好时间评估,尽早行动
- 远程访问postgresql数据库
- 第六节cocos2dx的小试牛刀
- 关于 plsql 的总结 (一)
- openjdk和jdk的区别与联系