📄 hxdir.cpp
字号:
return FALSE;#if !defined(WIN32_PLATFORM_PSPC) UINT nDriveType = 0;#ifdef _WIN32 nDriveType = GetDriveType(m_strPath); if(nDriveType == DRIVE_CDROM) return TRUE;#else nDriveType = GetDriveType(toupper(m_strPath.GetAt(0)) - 'A');#endif if(nDriveType == DRIVE_REMOVABLE) return TRUE;#endif /* defined(WIN32_PLATFORM_PSPC) */ return FALSE;}/* Deletes empty directory. */BOOL CHXDirectory::DeleteDirectory(){#ifdef _WIN32 if(m_hFindFile != INVALID_HANDLE_VALUE) { FindClose(m_hFindFile); m_hFindFile = INVALID_HANDLE_VALUE; }#endif if(RemoveDirectory(OS_STRING(m_strPath))) return TRUE; return FALSE;}/* Starts enumeration process. */CHXDirectory::FSOBJ CHXDirectory::FindFirst(const char* szPattern, char* szPath, UINT16 nSize){ FSOBJ RetVal = FSOBJ_NOTVALID; CHXString strMask = m_strPath; const char* pLastChar = HXGetPrevChar(m_strPath, (const char*)m_strPath + m_strPath.GetLength()); if(pLastChar + 1 != (const char*)m_strPath + m_strPath.GetLength() || *pLastChar != '\\') strMask += "\\"; strMask += szPattern;#ifdef _WIN32 if(m_hFindFile != INVALID_HANDLE_VALUE) { FindClose(m_hFindFile); m_hFindFile = INVALID_HANDLE_VALUE; } WIN32_FIND_DATA findData; m_hFindFile = FindFirstFile(OS_STRING(strMask), &findData); if(m_hFindFile != INVALID_HANDLE_VALUE) { if(m_strPath.GetLength() + 1 + strlen(OS_STRING(findData.cFileName)) < nSize) { SafeStrCpy(szPath, (const char*)m_strPath, nSize); pLastChar = HXGetPrevChar(szPath, szPath + strlen(szPath)); if(pLastChar + 1 < szPath + strlen(szPath) || *pLastChar != '\\') SafeStrCat(szPath, "\\", nSize); SafeStrCat(szPath, OS_STRING(findData.cFileName), nSize); } if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) RetVal = FSOBJ_DIRECTORY; else RetVal = FSOBJ_FILE; }#else if(!_dos_findfirst(strMask, _A_SUBDIR | _A_HIDDEN, &m_FindFileInfo)) { if(m_strPath.GetLength() + 1 + strlen(m_FindFileInfo.name) < nSize) { SafeStrCpy(szPath, (const char*)m_strPath, nSize); if(m_strPath.GetLength() && m_strPath.GetAt(m_strPath.GetLength() - 1) != '\\') SafeStrCat(szPath, "\\", nSize); SafeStrCat(szPath, m_FindFileInfo.name, nSize); } if (m_FindFileInfo.attrib & _A_SUBDIR) RetVal = FSOBJ_DIRECTORY; else RetVal = FSOBJ_FILE; }#endif while(RetVal != FSOBJ_NOTVALID && !IsValidFileDirName(szPath)) RetVal = FindNext(szPath, nSize); return RetVal;}/* Continues enumeration process. */CHXDirectory::FSOBJ CHXDirectory::FindNext(char* szPath, UINT16 nSize){ FSOBJ RetVal = FSOBJ_NOTVALID;#ifdef _WIN32 if(m_hFindFile != INVALID_HANDLE_VALUE) { WIN32_FIND_DATA findData; if(FindNextFile(m_hFindFile, &findData)) { if(m_strPath.GetLength() + 1 + strlen(OS_STRING(findData.cFileName)) < nSize) { SafeStrCpy(szPath, (const char*)m_strPath, nSize); const char* pLastChar = HXGetPrevChar(szPath, szPath + strlen(szPath)); if(pLastChar + 1 < szPath + strlen(szPath) || *pLastChar != '\\') SafeStrCat(szPath, "\\", nSize); SafeStrCat(szPath, OS_STRING(findData.cFileName), nSize); } if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) RetVal = FSOBJ_DIRECTORY; else RetVal = FSOBJ_FILE; } }#else if(!_dos_findnext(&m_FindFileInfo)) { if(m_strPath.GetLength() + 1 + strlen(m_FindFileInfo.name) < nSize) { SafeStrCpy(szPath, (const char*)m_strPath, nSize); if(m_strPath.GetLength() && m_strPath.GetAt(m_strPath.GetLength() - 1) != '\\') SafeStrCat(szPath, "\\", nSize); SafeStrCat(szPath, m_FindFileInfo.name, nSize); } if (m_FindFileInfo.attrib & _A_SUBDIR) RetVal = FSOBJ_DIRECTORY; else RetVal = FSOBJ_FILE; }#endif while(RetVal != FSOBJ_NOTVALID && !IsValidFileDirName(szPath)) RetVal = FindNext(szPath, nSize); return RetVal;}BOOL CHXDirectory::IsValidFileDirName(const char* szPath){ const char* pSlash = HXReverseFindChar(szPath, '\\'); if(!pSlash) return FALSE; CHXString strEnding = pSlash + 1; if(!strEnding.Compare(".") || !strEnding.Compare("..")) return FALSE; return TRUE;}BOOL CHXDirectory::DeleteFile(const char* szRelPath){ if(!szRelPath) return FALSE; CHXString strPath; if(strlen(szRelPath) > 1 && szRelPath[1] == ':') { strPath = szRelPath; } else { strPath = m_strPath; const char* pLastChar = HXGetPrevChar(m_strPath, (const char*)m_strPath + m_strPath.GetLength()); if(pLastChar + 1 < (const char*)m_strPath + m_strPath.GetLength() || *pLastChar != '\\') strPath += "\\"; strPath += szRelPath; } BOOL RetVal = FALSE; //_chmod(strPath, S_IREAD | S_IWRITE); DWORD attrib = GetFileAttributes(OS_STRING(strPath)); attrib &= ~FILE_ATTRIBUTE_READONLY; SetFileAttributes(OS_STRING(strPath), attrib); //if(!unlink(strPath) || errno != EACCES) if (::DeleteFile(OS_STRING(strPath))) RetVal = TRUE; return RetVal;}/* Sets itself to current directory. */BOOL CHXDirectory::SetCurrentDir(){ BOOL bRetVal = TRUE;#if defined(WIN32_PLATFORM_PSPC) // WinCE doesn't have a concept of a working directory. // Assert here and look at the calling code to see // if we really need to worry about this HX_ASSERT(!"CHXDirectory::SetCurrentDir()");#else /* defined(WIN32_PLATFORM_PSPC) */ if(!getcwd(m_strPath.GetBuffer(_MAX_PATH + 1), _MAX_PATH)) bRetVal = FALSE; m_strPath.ReleaseBuffer();#endif /* defined(WIN32_PLATFORM_PSPC) */ return bRetVal;}/* Makes itself a current directory. */BOOL CHXDirectory::MakeCurrentDir(){#ifdef _WIN16 // In win16, you have to change the current drive seperately from changing // to the new directory, if the new directory is on a different drive than // the current drive. int retval = 0; int curdrive = _getdrive(); int drive = (toupper(m_strPath.GetAt(0)) - 'A') + 1; if (curdrive != drive) if ((retval = _chdrive(drive)) != 0) return FALSE;#endif#if defined(WIN32_PLATFORM_PSPC) // WinCE does not have the concept of a current directory. // Assert here and look at the calling code to see if // we need to worry about it HX_ASSERT(!"CHXDirectory::MakeCurrentDir()");#else /* defined(WIN32_PLATFORM_PSPC) */ if(!chdir(m_strPath)) return TRUE;#endif /* defined(WIN32_PLATFORM_PSPC) */ return FALSE;}UINT32 CHXDirectory::Rename(const char* szOldName, const char* szNewName){ if ((szOldName == NULL) || (szNewName == NULL)) { HX_ASSERT(FALSE); return HXR_FAIL; } UINT32 theError = HXR_FAIL; CHXDirectory DestinationDir; DestinationDir.SetPath( szNewName ); if ( DestinationDir.IsValid() ) { //Destination directory exist. if(!::RemoveDirectory(OS_STRING(szNewName)) ) { //Failed to delete destination directory. //Check if read only attribute is set. DWORD attrib = GetFileAttributes(OS_STRING(szNewName)); if ( attrib & FILE_ATTRIBUTE_READONLY ) { //Directory is read only. //Remove read only attribute. attrib &= ~FILE_ATTRIBUTE_READONLY; SetFileAttributes(OS_STRING(szNewName), attrib); if(!::RemoveDirectory(OS_STRING(szNewName))) { //Still failed to delete. //So put the read only attribute back. attrib |= FILE_ATTRIBUTE_READONLY; SetFileAttributes(OS_STRING(szNewName), attrib); return HXR_FAIL; } } else { //Failed to delete & directory is not readonly. return HXR_FAIL; } } } if(MoveFile(OS_STRING(szOldName), OS_STRING(szNewName))) theError = HXR_OK; return theError;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -