工作中用到了,所以自己封装了一下。没做严格检查 /// 获取文件正确路径,如果是文件夹,就加上 BOOL CCommonTool::GetFileFullDirectoryPath( CString &szPath ) { DWORD dwAttibute; dwAttibute= GetFileAttributes( szPath ); if ( dwAttibute!=0xFFFFFFFF ) { if ( (dwAttibute&FILE_ATTRIBUTE_DIRECTORY) !=0 ) { if ( szPath.Right(1)!='//' ) { szPath+="//"; } return TRUE; } } return FALSE; } /// 检测文件夹是否存在 BOOL CCommonTool::DirectoryExists(LPCTSTR lpszFileName) const { DWORD dwAttributes = GetFileAttributes(lpszFileName); if(dwAttributes == 0xFFFFFFFF) { return false; } if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { return TRUE; } else { return FALSE; } } /// 检测文件是否存在,包括文件与文件夹 BOOL CCommonTool::FileExists(LPCTSTR lpszFileName) { DWORD dwAttributes = GetFileAttributes(lpszFileName); if(dwAttributes == 0xFFFFFFFF) { return false; } return TRUE; } /// 获取我的电脑路径 CString CCommonTool::GetSystemPath( int nAttribute /* =CSIDL_DESKTOP */ ) const { CString csSystemPath=_T(""); TCHAR szPath[MAX_PATH+1]=_T(""); #ifdef _WIN32_WCE LPITEMIDLIST ppidl=NULL; #else LPITEMIDLIST ppidl=NULL; #endif if ( SHGetSpecialFolderLocation( NULL, nAttribute, &ppidl )==S_OK ) { if ( SHGetPathFromIDList(ppidl, szPath )) { csSystemPath= szPath; } } return csSystemPath; } /* 按照指定的文件夹名顺序创建文件夹 szFileName: 如果文件已经存在,按照 szFileName(1)顺序创建 */ bool CCommonTool::CreateDirectory( CString &szFileName ) { int nIndex=1; CString szTemp= szFileName; do { if ( DirectoryExists(szTemp) ) { szTemp.Format(_T("%s(%d)"), szFileName, nIndex++); continue; } #ifdef _WIN32_WCE // 根目录创建时不要加'/' if ( szTemp.ReverseFind(_T('//'))==0 ) { szTemp= szTemp.Mid(1); } #endif szFileName= szTemp; return ( ::CreateDirectory(szFileName,NULL)>0 ); } while ( nIndex<1000 ); return false; } /// 检查文件夹操作状态 bool CCommonTool::InspectDirectoryPopedom( const CString szPath, DWORD dwFileAccess/* =GENERIC_READ|GENERIC_WRITE */ ) { #ifdef _WINDOWS_ // wince下不支持 HANDLE hDir=CreateFile(szPath, dwFileAccess, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); if ( hDir==INVALID_HANDLE_VALUE ) { return false; } CloseHandle(hDir); #endif return true; } /// 检查文件名是否符合要求 bool CCommonTool::InspectFileNameRule(const CString &csFileName) { // 文件名禁用字符列表 TCHAR szFILERULE[]= { '//', '/', ':', '*', '?', '/"', '<', '>', '|', '/0'}; for( DWORD i=0; i<STRLEN(szFILERULE); i++ ) { if ( csFileName.Find( szFILERULE[i])>=0 ) { return false; } } return true; }