From 6a3836d40ff862b8627dc7e33e36b6fdabaecaf0 Mon Sep 17 00:00:00 2001 From: Emmet Young Date: Mon, 16 Feb 2015 17:13:37 +1100 Subject: [PATCH] Initial Cleanup of Path.cpp, remove no longer used functions --- Source/Common/path.cpp | 1507 +--------------------------------------- Source/Common/path.h | 123 +--- 2 files changed, 4 insertions(+), 1626 deletions(-) diff --git a/Source/Common/path.cpp b/Source/Common/path.cpp index 998dedeee..02b21610a 100644 --- a/Source/Common/path.cpp +++ b/Source/Common/path.cpp @@ -36,39 +36,6 @@ HINSTANCE CPath::GethInst() return m_hInst; } -//------------------------------------------------------------- -// Task : Create a string of length nDigits containing random digits -//------------------------------------------------------------- -static stdstr RandomDigits(int nDigits) -{ - // Keep the number of digits in a rational limit - //ASSERT(nDigits > 0); - //ASSERT(nDigits < 20); - - int nDigits2 = nDigits; - stdstr Digits; - TCHAR next_8_digits[9]; - while(nDigits2 > 0) - { - _stprintf(next_8_digits,_T("%08lx"),GetTickCount()); - - for(int i=0; i<8; i++) - { - Digits += next_8_digits[i]; - if(--nDigits2 == 0) - break; - } - } - - int last_digit =rand(); - if(last_digit < 0) - last_digit =(-last_digit); - last_digit %= 10; - Digits[nDigits - 1] = (char)('0' + last_digit); - - return Digits; -} - ////////////////////////////////////////////////////////////////////// // Initialisation ////////////////////////////////////////////////////////////////////// @@ -166,29 +133,6 @@ CPath::CPath(const stdstr& strPath, const stdstr& NameExten ) SetNameExtension(NameExten.c_str()); } -//------------------------------------------------------------- -// Task : Constructs a path and points it 2 specified -// special directory -//------------------------------------------------------------- -CPath::CPath(SpecialDirectoryType eInitialDir) -{ - Init(); - SpecialDirectory(eInitialDir); -} - -CPath::CPath(SpecialDirectoryType eInitialDir, const stdstr & NameExten ) -{ - Init(); - SpecialDirectory(eInitialDir); - SetNameExtension(NameExten.c_str()); -} - -CPath::CPath(SpecialDirectoryType eInitialDir, LPCTSTR NameExten ) -{ - Init(); - SpecialDirectory(eInitialDir); - SetNameExtension(NameExten); -} //------------------------------------------------------------- // Task : Cleanup and destruct a path object //------------------------------------------------------------- @@ -275,45 +219,6 @@ CPath::CPath(DIR_CURRENT_DIRECTORY /*sdt*/, LPCTSTR NameExten) if (NameExten) { SetNameExtension(NameExten); } } -CPath::CPath(DIR_WINDOWS_DIRECTORY /*sdt*/, LPCTSTR NameExten) -{ - // Windows directory - Init(); - WindowsDirectory(); - if (NameExten) { SetNameExtension(NameExten); } -} - -CPath::CPath(DIR_SYSTEM_DIRECTORY /*sdt*/, LPCTSTR NameExten) -{ - // Windows' system directory - Init(); - SystemDirectory(); - if (NameExten) { SetNameExtension(NameExten); } -} - -CPath::CPath(DIR_SYSTEM32_DIRECTORY /*sdt*/, LPCTSTR NameExten) -{ - Init(); - SystemDirectory(); - if (NameExten) { SetNameExtension(NameExten); } -} - -CPath::CPath(DIR_SYSTEM_DRIVER_DIRECTORY /*sdt*/, LPCTSTR NameExten) -{ - Init(); - SystemDirectory(); - AppendDirectory(_T("drivers")); - if (NameExten) { SetNameExtension(NameExten); } -} - -CPath::CPath(DIR_SYSTEM_DRIVE_ROOT_DIRECTORY /*sdt*/, LPCTSTR NameExten) -{ - // The root directory of system drive - Init(); - SystemDriveRootDirectory(); - if (NameExten) { SetNameExtension(NameExten); } -} - CPath::CPath(DIR_MODULE_DIRECTORY /*sdt*/, LPCTSTR NameExten) { // The directory where the executable of this app is @@ -329,96 +234,6 @@ CPath::CPath(DIR_MODULE_FILE /*sdt*/) Module(); } -void CPath::SpecialDirectory(SpecialDirectoryType eInitialDir) -{ - switch(eInitialDir) - { - // Windows temp directory - case TEMP_DIRECTORY: - TempDirectory(); - break; - // Program files directory - case PROGRAM_FILES_DIRECTORY: - ProgramFilesDirectory(); - break; - // Common files directory - case COMMON_FILES_DIRECTORY: - CommonFilesDirectory(); - break; - // Accessories directory - case ACCESSORIES_DIRECTORY: - AccessoriesDirectory(); - break; - // Media directory - case MEDIA_DIRECTORY: - MediaDirectory(); - break; - // INF directory - case DEVICE_DIRECTORY: - DeviceDirectory(); - break; - // User specific directories - case USER_DESKTOP_DIRECTORY: - UserDesktopDirectory(); - break; - case USER_FAVORITES_DIRECTORY: - UserFavoritesDirectory(); - break; - case USER_FONTS_DIRECTORY: - UserFontsDirectory(); - break; - case USER_NETHOOD_DIRECTORY: - UserNetworkNeighbourhoodDirectory(); - break; - case USER_DOCUMENTS_DIRECTORY: - UserDocumentsDirectory(); - break; - case USER_RECENT_DIRECTORY: - UserRecentDirectory(); - break; - case USER_SENDTO_DIRECTORY: - UserSendToDirectory(); - break; - case USER_RECYCLE_DIRECTORY: - UserRecycleBinDirectory(); - break; - case USER_APPLICATION_DATA_DIRECTORY: - UserApplicationDataDirectory(); - break; - case USER_TEMPLATES_DIRECTORY: - UserTemplatesDirectory(); - break; - case USER_STARTMENU_DIRECTORY: - UserStartMenuDirectory(); - break; - case USER_STARTMENU_STARTUP_DIRECTORY: - UserStartMenuStartupDirectory(); - break; - case USER_STARTMENU_PROGRAMS_DIRECTORY: - UserStartMenuProgramsDirectory(); - break; - // Directories common 2 all users - case COMMON_DESKTOP_DIRECTORY: - CommonDesktopDirectory(); - break; - case COMMON_STARTMENU_DIRECTORY: - CommonStartMenuDirectory(); - break; - case COMMON_STARTMENU_STARTUP_DIRECTORY: - CommonStartMenuStartupDirectory(); - break; - case COMMON_STARTMENU_PROGRAMS_DIRECTORY: - CommonStartMenuProgramsDirectory(); - break; - // Unknown special directory constant - default: - // Accept only constants we know about - //Bugger - _ASSERTE(false); - break; - } -} - //------------------------------------------------------------- // Post : Returns the drive component without a colon, e.g. "c" // Returns the directory component with a leading backslash, @@ -474,21 +289,6 @@ void CPath::GetComponents(stdstr* pDrive, StripLeadingChar(*pExtension,EXTENSION_DELIMITER); } -//------------------------------------------------------------- -// Task : Get drive from path -//------------------------------------------------------------- -void CPath::GetDrive(stdstr& rDrive) const -{ - GetComponents(&rDrive); -} - -stdstr CPath::GetDrive(void) const -{ - stdstr rDrive; - GetComponents(&rDrive); - return rDrive; -} - //------------------------------------------------------------- // Task : Get drive and directory from path //------------------------------------------------------------- @@ -621,23 +421,6 @@ void CPath::GetFullyQualified(stdstr& rFullyQualified) const rFullyQualified =buff_fullname; } -//------------------------------------------------------------- -// Task : Get fully qualified path in short (8.3 style) form -//------------------------------------------------------------- -void CPath::GetFullyQualifiedShort(stdstr& rFullyQualifiedShort) const -{ - GetFullyQualified(rFullyQualifiedShort); - - //#pragma message(Reminder(_T("Also implement a GetFullyQualifiedLong"))) - - TCHAR buff_fullname[MAX_PATH]; - - memset(buff_fullname, 0, sizeof(buff_fullname)); - - GetShortPathName(rFullyQualifiedShort.c_str(),buff_fullname,sizeof(buff_fullname)/sizeof(TCHAR)); - rFullyQualifiedShort =buff_fullname; -} - //------------------------------------------------------------- // Post : Return TRUE if path does not start from filesystem root // Task : Check if path is a relative one (e.g. doesn't start with C:\...) @@ -655,52 +438,6 @@ BOOL CPath::IsRelative() const return true; } -//------------------------------------------------------------- -// Post : Return TRUE if there are wildcards in the path -// Task : Check if path contains wildcards -//------------------------------------------------------------- -BOOL CPath::IsWild() const -{ - return (m_strPath.find_first_of(WILD_SET) != stdstr::npos); -} - -//------------------------------------------------------------- -// Post : Return TRUE if path is lexically correct -// Task : Determine whether lpszFileName is valid. A filename -// is valid if it contains only legal characters, doesn't -// have repeated contiguous subdirectory delimiters, has at -// most one drive delimiter, and all components fit within -// maximum sizes -// This routine does NOT determine if a file exists, or -// even if it could exist relative to the user's directory -// hierarchy. Its tests are for lexical correctness only -// See also: CPath::Exists -//------------------------------------------------------------- -BOOL CPath::IsValid () const -{ - // Check 4 illegal characters (no wildcards allowed) - // We accept either \ or / as folder delimiter - if(IsWild() || - (m_strPath.find_first_of(_T("|\"<>")) != stdstr::npos) || - (m_strPath.find(_T("//")) != stdstr::npos)) - return FALSE; - - int index = (int)m_strPath.find(_T("\\\\")); - if((index != stdstr::npos) && (index > 0)) - return FALSE; - - // Make sure : can appear only in the 2nd position as a drive delimiter - if(((index = (int)m_strPath.find(':')) != stdstr::npos) && (index != 1)) - return FALSE; - - // Make sure it fits in the maximum path size - if(m_strPath.length() > MAX_PATH) - return FALSE; - - // Path is valid - return TRUE; -} - //------------------------------------------------------------- // Task : Set path components //------------------------------------------------------------- @@ -910,45 +647,6 @@ void CPath::CurrentDirectory() SetDriveDirectory(buff_path); } -//------------------------------------------------------------- -// Task : Set path 2 Windows directory -//------------------------------------------------------------- -void CPath::WindowsDirectory() -{ - TCHAR buff_path[MAX_PATH]; - - memset(buff_path, 0, sizeof(buff_path)); - - GetWindowsDirectory(buff_path,MAX_PATH); - - Empty(); - SetDriveDirectory(buff_path); -} - -//------------------------------------------------------------- -// Task : Set path 2 Windows system directory -//------------------------------------------------------------- -void CPath::SystemDirectory() -{ - TCHAR buff_path[MAX_PATH]; - - memset(buff_path, 0, sizeof(buff_path)); - - GetSystemDirectory(buff_path,MAX_PATH); - - Empty(); - SetDriveDirectory(buff_path); -} - -//------------------------------------------------------------- -// Task : Set path 2 root of system drive (usually C:\) -//------------------------------------------------------------- -void CPath::SystemDriveRootDirectory() -{ - SystemDirectory(); - SetDirectory(_T("")); -} - //------------------------------------------------------------- // Task : Set path 2 the name of specified module //------------------------------------------------------------- @@ -992,897 +690,6 @@ void CPath::ModuleDirectory() SetNameExtension(_T("")); } -//------------------------------------------------------------- -// Task : Currently, if the current environment has an -// entry for the TEMP environment variable, the directory will -// be set to that. If not, the directory will be the Windows -// System directory. The caller of this method, however, should -// not rely on this convention -//------------------------------------------------------------- -void CPath::TempDirectory() -{ - TCHAR buff_path[MAX_PATH]; - - memset(buff_path, 0, sizeof(buff_path)); - - GetTempPath(MAX_PATH,buff_path); - - m_strPath =buff_path; - SetNameExtension(_T("")); -} - -//------------------------------------------------------------- -// Task : Set path 2 program files folder -// Usually C:\Program Files -//------------------------------------------------------------- -void CPath::ProgramFilesDirectory() -{ - stdstr strPath; - if(GetRegistryPath(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),_T("ProgramFilesDir"),strPath)) - { - // Got a path, use it - Empty(); - SetDriveDirectory(strPath.c_str()); - } - else - { - // This is some old or unknown system - Empty(); - SetDriveDirectory(_T("C:\\Programs")); - } -} - -//------------------------------------------------------------- -// Task : Set path 2 common files folder -// Usually C:\Program Files\Common Files -//------------------------------------------------------------- -void CPath::CommonFilesDirectory() -{ - stdstr strPath; - if(GetRegistryPath(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),_T("CommonFilesDir"),strPath)) - { - // Got a path, use it - Empty(); - SetDriveDirectory(strPath.c_str()); - } - else - { - // This is some old or unknown system - Empty(); - - TCHAR Drive[3]; - memset(Drive, 0, sizeof(Drive)); - ExpandEnvironmentStrings (_T("%SystemDrive%"), Drive, sizeof(Drive)/sizeof(TCHAR) ); - - stdstr strDir = stdstr(Drive) + stdstr(_T("\\Program Files\\Common Files")); - - SetDriveDirectory(strDir.c_str()); - } -} - -//------------------------------------------------------------- -// Task : Set path 2 common files folder -// On Win95 is C:\Program Files\Accessories -// On WinNT is C:\Program Files\Windows NT\Accessories -//------------------------------------------------------------- -void CPath::AccessoriesDirectory() -{ - // Accessories folder is in Program Files folder - ProgramFilesDirectory(); - - COSVersion osver; - WORD ostype =osver.GetOSType(); - WORD wintype =osver.GetWindowsType(); - BOOL is_Win95 =(ostype==OS_WIN95) || (ostype==OS_WIN98); - BOOL is_NT =((ostype & OS_WINNT) != 0); - - if((wintype != WIN_32S) && is_Win95) - { - // Windows 95 - AppendDirectory(_T("Accessories")); - return; - } - - if((wintype != WIN_32S) && is_NT && (((osver.GetMajorVersion()==3) && (osver.GetMinorVersion()>=51)) || (osver.GetMajorVersion()>3))) - { - // Windows NT with the new Chichago shell - AppendDirectory(_T("Windows NT\\Accessories")); - return; - } - - // This is some old or unknown system - AppendDirectory(_T("Accessry")); -} - -//------------------------------------------------------------- -// Task : Set path 2 media folder -// Usually C:\Windows\Media -//------------------------------------------------------------- -void CPath::MediaDirectory() -{ - stdstr strPath; - if(GetRegistryPath(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),_T("MediaPath"),strPath)) - { - // Got a path, use it - Empty(); - SetDriveDirectory(strPath.c_str()); - } - else - { - // This is some old or unknown system - WindowsDirectory(); - AppendDirectory(_T("Media")); - } -} - -//------------------------------------------------------------- -// Task : Set path 2 device definition folder -// Usually C:\Windows\Inf -//------------------------------------------------------------- -void CPath::DeviceDirectory() -{ - stdstr strPath; - if(GetRegistryPath(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),_T("DevicePath"),strPath)) - { - // Got a path, use it - Empty(); - SetDriveDirectory(strPath.c_str()); - } - else - { - // This is some old or unknown system - WindowsDirectory(); - AppendDirectory(_T("Inf")); - } -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will return FALSE -// Task : Set path 2 one of the special folders in Chichago -//------------------------------------------------------------- -BOOL CPath::ShellDirectory(int nShellFolderID) -{ - COSVersion osver; - WORD ostype =osver.GetOSType(); - WORD wintype =osver.GetWindowsType(); - BOOL is_Win95 =(ostype==OS_WIN95) || (ostype==OS_WIN98); - BOOL is_NT =((ostype & OS_WINNT) != 0); - - if((wintype != WIN_32S) && - (is_Win95 || (is_NT && (((osver.GetMajorVersion()==3) && (osver.GetMinorVersion()>=51)) || (osver.GetMajorVersion()>3))))) - { - // These systems support the new Chichago shell, get location from registry - BOOL result =FALSE; - LPITEMIDLIST pidl =NULL; - TCHAR special_path[MAX_PATH]; - - memset(special_path, 0, sizeof(special_path)); - - // Get a PIDL 2 the special shell folder - HRESULT hr =SHGetSpecialFolderLocation(NULL,nShellFolderID,&pidl); - if(SUCCEEDED(hr)) - { - // Convert the PIDL in2 a path - result =SHGetPathFromIDList(pidl,special_path); - - // Free the PIDL - // Get the address of our task allocator's IMalloc interface - LPMALLOC pMalloc = NULL; - hr =SHGetMalloc(&pMalloc); - - if(SUCCEEDED(hr)) - { - // Free the PIDL - pMalloc->Free(pidl); - - // Free our task allocator - pMalloc->Release(); - } - } - - if(result) - { - // We've got the special path, now set ourselves 2 point 2 this - Empty(); - SetDriveDirectory(special_path); - } - - return result; - } - - // This is some old or unknown system, shell folders not supported - return FALSE; -} - -//--------------------------------------------------------------------------- -// Post : Return TRUE on success -// Task : Set path 2 one of the special folders in Chichago -// This function manually digs in the registry instead of using -// SHGetSpecialFolderLocation, since it seems that this does not work 4 -// special location constants beginning with -//--------------------------------------------------------------------------- -BOOL CPath::ShellDirectory2(int nShellFolderID) -{ - COSVersion osver; - WORD ostype =osver.GetOSType(); - WORD wintype =osver.GetWindowsType(); - BOOL is_Win95 =(ostype==OS_WIN95) || (ostype==OS_WIN98); - BOOL is_NT =((ostype & OS_WINNT) != 0); - - if((wintype != WIN_32S) && - (is_Win95 || (is_NT && (((osver.GetMajorVersion()==3) && (osver.GetMinorVersion()>=51)) || (osver.GetMajorVersion()>3))))) - { - // These systems support the new Chichago shell, get location from registry - HKEY root = NULL; - stdstr key; - stdstr value; - - switch(nShellFolderID) - { - case CSIDL_DESKTOPDIRECTORY: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Desktop"); - break; - - case CSIDL_FAVORITES: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Favorites"); - break; - - case CSIDL_FONTS: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Fonts"); - break; - - case CSIDL_NETHOOD: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("NetHood"); - break; - - case CSIDL_PERSONAL: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Personal"); - break; - - case CSIDL_RECENT: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Recent"); - break; - - case CSIDL_SENDTO: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("SendTo"); - break; - - case CSIDL_TEMPLATES: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Templates"); - break; - - case CSIDL_APPDATA: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("AppData"); - break; - - case CSIDL_STARTMENU: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Start Menu"); - break; - - case CSIDL_STARTUP: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Startup"); - break; - - case CSIDL_PROGRAMS: - root =HKEY_CURRENT_USER; - key =_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Programs"); - break; - - case CSIDL_COMMON_DESKTOPDIRECTORY: - root =HKEY_LOCAL_MACHINE; - key =_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Common Desktop"); - break; - - case CSIDL_COMMON_STARTMENU: - root =HKEY_LOCAL_MACHINE; - key =_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Common Start Menu"); - break; - - case CSIDL_COMMON_STARTUP: - root =HKEY_LOCAL_MACHINE; - key =_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Common Startup"); - break; - - case CSIDL_COMMON_PROGRAMS: - root =HKEY_LOCAL_MACHINE; - key =_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"); - value =_T("Common Programs"); - break; - } - - stdstr strPath; - if(GetRegistryPath(root,key.c_str(),value.c_str(),strPath)) - { - // Got a path, use it - Empty(); - SetDriveDirectory(strPath.c_str()); - - return TRUE; - } - } - - // This is some old or unknown system - return FALSE; -} - -//--------------------------------------------------------------------------- -// Post : Return FALSE if specified value does not exist or some error -// Task : Dig in the registry 2 the specified location, and extract a path -// Make sure the path is a valid -//--------------------------------------------------------------------------- -BOOL CPath::GetRegistryPath(HKEY hRootKey, LPCTSTR lpcszKeyName, LPCTSTR lpcszValueName, stdstr &strPath) -{ - TCHAR path_buffer [MAX_PATH]; - TCHAR expanded_buffer[MAX_PATH]; - ULONG path_buffer_size =sizeof(path_buffer); - CRegistry reg(hRootKey,lpcszKeyName,KEY_READ); - memset(path_buffer, 0, sizeof(path_buffer)); - memset(expanded_buffer, 0, sizeof(expanded_buffer)); - - if(reg.GetValue(lpcszValueName,(BYTE *)&path_buffer,path_buffer_size)) - { - COSVersion osver; -#ifndef _UNICODE - WORD ostype =osver.GetOSType(); - BOOL is_NT =((ostype & OS_WINNT) != 0); - if(is_NT) - { - // Running on NT and the ExpandEnvironmentStrings API requires - // Unicode strings - WCHAR path_buffer_unicode [MAX_PATH]; - WCHAR expanded_buffer_unicode[MAX_PATH]; - - memset(path_buffer_unicode, 0, sizeof(path_buffer_unicode)); - memset(expanded_buffer_unicode, 0, sizeof(expanded_buffer_unicode)); - - MultiByteToWideChar(CP_ACP,0,path_buffer,-1,path_buffer_unicode,sizeof(path_buffer_unicode)/sizeof(WCHAR)); - ExpandEnvironmentStringsW(path_buffer_unicode,expanded_buffer_unicode,sizeof(expanded_buffer_unicode)/sizeof(WCHAR)); - WideCharToMultiByte(CP_ACP,0,expanded_buffer_unicode,-1,expanded_buffer,sizeof(path_buffer)/sizeof(TCHAR),NULL,NULL); - } - else -#endif - ExpandEnvironmentStrings(path_buffer,expanded_buffer,path_buffer_size); - - strPath.erase(); - strPath =expanded_buffer; - - return TRUE; - } - - // No such key and/or value - return FALSE; -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 desktop folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserDesktopDirectory() -{ - if(!ShellDirectory(CSIDL_DESKTOPDIRECTORY)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 favorites folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserFavoritesDirectory() -{ - if(!ShellDirectory(CSIDL_FAVORITES)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 fonts folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserFontsDirectory() -{ - if(!ShellDirectory(CSIDL_FONTS)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 network hood folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserNetworkNeighbourhoodDirectory() -{ - if(!ShellDirectory(CSIDL_NETHOOD)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 personal folder of currently logged-in user -// Usually C:\My Documents -//------------------------------------------------------------- -void CPath::UserDocumentsDirectory() -{ - if(!ShellDirectory(CSIDL_PERSONAL)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 recent folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserRecentDirectory() -{ - if(!ShellDirectory(CSIDL_RECENT)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 SendTo folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserSendToDirectory() -{ - if(!ShellDirectory(CSIDL_SENDTO)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 templates folder of currently logged-in user -// Usually C:\Windows\ShellNew -//------------------------------------------------------------- -void CPath::UserTemplatesDirectory() -{ - if(!ShellDirectory(CSIDL_TEMPLATES)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 the recycle bin directory -// Usually C:\Recycled -//------------------------------------------------------------- -void CPath::UserRecycleBinDirectory() -{ - if(!ShellDirectory(CSIDL_BITBUCKET)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 the folder where application data is stored -// specific 2 currently logged-in user -//------------------------------------------------------------- -void CPath::UserApplicationDataDirectory() -{ - if(!ShellDirectory(CSIDL_APPDATA)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 start menu folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserStartMenuDirectory() -{ - if(!ShellDirectory(CSIDL_STARTMENU)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 startup folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserStartMenuStartupDirectory() -{ - if(!ShellDirectory(CSIDL_STARTUP)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 programs menu folder of currently logged-in user -//------------------------------------------------------------- -void CPath::UserStartMenuProgramsDirectory() -{ - if(!ShellDirectory(CSIDL_PROGRAMS)) - Empty(); -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 desktop folder common 2 all users -//------------------------------------------------------------- -void CPath::CommonDesktopDirectory() -{ - if(!ShellDirectory2(CSIDL_COMMON_DESKTOPDIRECTORY)) - { - // Check if running on Windows 95, and workaround this if so - COSVersion osver; - WORD ostype =osver.GetOSType(); - if((ostype == OS_WIN95) || (ostype == OS_WIN98)) - { - // Manual workaround - WindowsDirectory(); - AppendDirectory(_T("Desktop")); - } - else - // Failure, clear path - Empty(); - } -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 start menu folder common 2 all users -//------------------------------------------------------------- -void CPath::CommonStartMenuDirectory() -{ - if(!ShellDirectory2(CSIDL_COMMON_STARTMENU)) - { - // Check if running on Windows 95, and workaround this if so - COSVersion osver; - WORD ostype =osver.GetOSType(); - if((ostype == OS_WIN95) || (ostype == OS_WIN98)) - { - // Manual workaround - WindowsDirectory(); - AppendDirectory(_T("Start Menu")); - } - else - // Failure, clear path - Empty(); - } -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 startup folder common 2 all users -//------------------------------------------------------------- -void CPath::CommonStartMenuStartupDirectory() -{ - if(!ShellDirectory2(CSIDL_COMMON_STARTUP)) - { - // Check if running on Windows 95, and workaround this if so - COSVersion osver; - WORD ostype =osver.GetOSType(); - if((ostype == OS_WIN95) || (ostype == OS_WIN98)) - { - // Manual workaround - WindowsDirectory(); - AppendDirectory(_T("Start Menu\\Programs\\StartUp")); - } - else - // Failure, clear path - Empty(); - } -} - -//------------------------------------------------------------- -// Post : If this function is called on a system which does not -// support the new Chichago shell, it will clear the path -// Task : Set path 2 programs menu folder common 2 all users -//------------------------------------------------------------- -void CPath::CommonStartMenuProgramsDirectory() -{ - if(!ShellDirectory2(CSIDL_COMMON_PROGRAMS)) - { - // Check if running on Windows 95, and workaround this if so - COSVersion osver; - WORD ostype =osver.GetOSType(); - if((ostype == OS_WIN95) || (ostype == OS_WIN98)) - { - // Manual workaround - WindowsDirectory(); - AppendDirectory(_T("Start Menu\\Programs")); - } - else - // Failure, clear path - Empty(); - } -} - - -//------------------------------------------------------------- -// Task : Set path 2 file WIN.INI in the Windows directory -//------------------------------------------------------------- -void CPath::WindowsProfile() -{ - WindowsDirectory(); - SetNameExtension(_T("Win.INI")); -} - -//------------------------------------------------------------- -// Task : Set path 2 file WIN.INI in the Windows directory -//------------------------------------------------------------- -void CPath::SystemProfile() -{ - WindowsDirectory(); - SetNameExtension(_T("System.INI")); -} - -//------------------------------------------------------------- -// Task : Turn this path from "x:\directory\subdirectory\name.ext" -// to just "x:\" -//------------------------------------------------------------- -void CPath::MakeRoot() -{ - SetDirectory(_T("")); - SetNameExtension(_T("")); -} - -//------------------------------------------------------------- -// Pre : Only the first 3 character from lpcszPrefix will be used -// Post : Returns TRUE on success -// Task : Creates a temporary name -//------------------------------------------------------------- -BOOL CPath::CreateTempName(LPCTSTR lpcszPrefix) -{ - // Check that we've got a prefix - if(!lpcszPrefix) - return FALSE; - - stdstr Dir; - TCHAR temp_file[MAX_PATH]; - - memset(temp_file, 0, sizeof(temp_file)); - - GetDriveDirectory(Dir); - - if(::GetTempFileName(Dir.c_str(),lpcszPrefix,0,temp_file) != 0) - { - // Got a temp file name - *this =temp_file; - SetExtension(_T("tmp")); - - // GetTempFileName actually created the file, remove it now, - // we only needed a name - Delete(TRUE); - - return TRUE; - } - - return FALSE; -} - -//--------------------------------------------------------------------------- -// Pre : Only the first 3 character from lpcszPrefix will be used -// Post : Returns TRUE on success -// Task : Creates a temporary folder name -//--------------------------------------------------------------------------- -BOOL CPath::CreateTempDir(LPCTSTR lpcszPrefix, UINT nRetries) -{ - // Check that we've got a prefix - if(!lpcszPrefix) - return FALSE; - - UINT retries =0; - BOOL bSuccess =FALSE; - TCHAR temp_prefix[ 5]; - TCHAR temp_name [15]; - - ZeroMemory(temp_prefix, sizeof(temp_prefix)); - ZeroMemory(temp_name , sizeof(temp_name )); - _tcsncpy(temp_prefix,lpcszPrefix,4); - temp_prefix[3] =_T('\0'); - - while(!bSuccess && (retries < nRetries)) - { - _tcscpy(temp_name, temp_prefix); - stdstr temp =RandomDigits(5); - _tcscat(temp_name,temp.c_str()); - _tcscat(temp_name,_T(".tmp")); - - CPath test(*this); - - test.AppendDirectory(temp_name); - if(!test.DirectoryExists() && test.CreateDirectory()) - { - // CreateTempDir actually created the folder, remove it now, - // we only needed a name - test.RemoveDirectory(); - bSuccess =TRUE; - } - - retries++; - } - - if(bSuccess) - AppendDirectory(temp_name); - - return bSuccess; -} - -//------------------------------------------------------------- -// Post : Returns TRUE on success -// Task : Sets path 2 a random name, and optionally ensures -// uniqueness of that path -//------------------------------------------------------------- -BOOL CPath::CreateRandomName(BOOL bMustNotExist /*= TRUE*/, UINT nRetries /*= 1000*/) -{ - stdstr Name; - - for(UINT nRetry=0; nRetry < nRetries; nRetry++) - { - Name =RandomDigits(8); - SetName(Name.c_str()); - if(!bMustNotExist) - return TRUE; - if(!Exists()) - return TRUE; - } - - return FALSE; -} - -//------------------------------------------------------------- -// Post : Returns TRUE on success -// Task : Create a new name, based on the existing name, for the same -// drive and directory. If bMustNotExist, test the path up to -// nRetries till we get an unused path -// See also: CreateRandomName -//------------------------------------------------------------- -BOOL CPath::CreateSimilarName(BOOL bMustNotExist /*= TRUE*/, UINT nRetries /*= 1000*/) -{ - stdstr NewName; - stdstr OriginalName; - - GetName(OriginalName); - - for(UINT nRetry=0; nRetry < nRetries; nRetry++) - { - NewName =OriginalName + RandomDigits(_MAX_FNAME - (int)OriginalName.length()); - SetName(NewName.c_str()); - if(!Exists() || !bMustNotExist) - return TRUE; - } - - return FALSE; -} - -//------------------------------------------------------------- -// Post : Returns one of the EX_DRIVE_ constants -// Task : Return the type of the drive this path points to -// See DrvType.H for more details -//------------------------------------------------------------- -UINT CPath::GetDriveType() const -{ - CPath RootPath = *this; - stdstr Root; - - RootPath.MakeRoot(); - Root =(LPCTSTR)RootPath; - - return ::GetDriveType(Root.c_str()); -} - -//------------------------------------------------------------- -// Post : Return -1 on error -// Task : Find out the amount of free space on drive (in bytes) -//------------------------------------------------------------- -ULONG CPath::DriveFreeSpaceBytes() const -{ - CPath RootPath = *this; - stdstr Root; - - RootPath.MakeRoot(); - - ULONG nSectorsPerCluster = 0; - ULONG nBytesPerSector = 0; - ULONG nFreeClusters = 0; - ULONG nClusters = 0; - - if(!GetDiskFreeSpace((LPCTSTR)RootPath,&nSectorsPerCluster,&nBytesPerSector,&nFreeClusters,&nClusters)) - return 0; - else - return nFreeClusters * nSectorsPerCluster * nBytesPerSector; -} - -//------------------------------------------------------------- -// Post : Return -1 on error -// Task : Find out the size of the drive (in bytes) -//------------------------------------------------------------- -ULONG CPath::DriveTotalSpaceBytes() const -{ - CPath RootPath = *this; - stdstr Root; - - RootPath.MakeRoot(); - - ULONG nSectorsPerCluster = 0; - ULONG nBytesPerSector = 0; - ULONG nFreeClusters = 0; - ULONG nClusters = 0; - - if(!GetDiskFreeSpace((LPCTSTR)RootPath,&nSectorsPerCluster,&nBytesPerSector,&nFreeClusters,&nClusters)) - return 0; - else - return nClusters * nSectorsPerCluster * nBytesPerSector; -} - -//------------------------------------------------------------- -// Post : Return -1 on error -// Task : Find out the cluster size on this drive (in bytes) -//------------------------------------------------------------- -ULONG CPath::GetDriveClusterSize() const -{ - CPath RootPath = *this; - stdstr Root; - - RootPath.MakeRoot(); - - ULONG nSectorsPerCluster = 0; - ULONG nBytesPerSector = 0; - ULONG nFreeClusters = 0; - ULONG nClusters = 0; - - if(!GetDiskFreeSpace((LPCTSTR)RootPath,&nSectorsPerCluster,&nBytesPerSector,&nFreeClusters,&nClusters)) - return 0; - else - return nSectorsPerCluster * nBytesPerSector; -} - -//------------------------------------------------------------- -// Post : Return TRUE on success -// Task : Find out info about drive -//------------------------------------------------------------- -BOOL CPath::GetDiskInfo(LPDWORD lpSectorsPerCluster, - LPDWORD lpBytesPerSector, - LPDWORD lpFreeClusters, - LPDWORD lpClusters) const -{ - // Create root path - CPath RootPath = *this; - RootPath.MakeRoot(); - - return GetDiskFreeSpace((LPCTSTR)RootPath, - lpSectorsPerCluster, - lpBytesPerSector, - lpFreeClusters, - lpClusters); -} - //--------------------------------------------------------------------------- // Post : Return TRUE if a directory // Task : Check if this path represents a directory @@ -1923,21 +730,6 @@ BOOL CPath::DirectoryExists() const return bGotFile; } -//------------------------------------------------------------- -// Post : Return TRUE if there are no files(s)/folder(s) in -// directory. All objects (with hidden, system, etc. attributes) -// are looked up -// Task : Check if directory contains any file(s) -//------------------------------------------------------------- -BOOL CPath::IsDirectoryEmpty() const -{ - CPath FileSpec = *this; - - FileSpec.SetNameExtension(WILD_NAME_EXTENSION); - return !FileSpec.FindFirst(_A_NORMAL | _A_ARCH | _A_HIDDEN | _A_SYSTEM | _A_RDONLY) && - !FileSpec.FindFirst(_A_HIDDEN | _A_SUBDIR); -} - //------------------------------------------------------------- // Post : Return TRUE if these is such a file // Task : Check if file exists @@ -1954,200 +746,6 @@ BOOL CPath::Exists() const return bSuccess; } -//------------------------------------------------------------- -// Post : Return file size, -1 on error -// Task : Get file size (in bytes) -//------------------------------------------------------------- -ULONG CPath::GetSize() const -{ - WIN32_FIND_DATA FindData; - - memset(&FindData, 0, sizeof(FindData)); - - HANDLE hFindFile =FindFirstFile(m_strPath.c_str(),&FindData); - BOOL bSuccess =(hFindFile != INVALID_HANDLE_VALUE); - - if(hFindFile != NULL) // Make sure we close the search - FindClose(hFindFile); - - return bSuccess ? FindData.nFileSizeLow : (ULONG)-1; -} - -//------------------------------------------------------------- -// Post : Return file attributes -// Task : Get attributes of the file -//------------------------------------------------------------- -ULONG CPath::GetAttributes() const -{ - return GetFileAttributes(m_strPath.c_str()); -} - -//--------------------------------------------------------------------------- -// Post : Return TRUE on success -// Task : Set the attributes of the file -//--------------------------------------------------------------------------- -BOOL CPath::SetAttributes(ULONG dwAttributes) -{ - return SetFileAttributes(m_strPath.c_str(),dwAttributes); -} - -//------------------------------------------------------------- -// Post : Return TRUE on success -// Task : Get file creation, last acces and/or last modification -// time as local time -//------------------------------------------------------------- -BOOL CPath::GetTime(FILETIME *lpCreated, FILETIME *lpAccessed, FILETIME *lpModified) const -{ - WIN32_FIND_DATA findFileData; - HANDLE hFind =FindFirstFile(m_strPath.c_str(),&findFileData); - if(hFind == INVALID_HANDLE_VALUE) - // Oops, no such file system object - return FALSE; - FindClose(hFind); - - FILETIME ftLastWriteTimeLocal; - FileTimeToLocalFileTime(&findFileData.ftLastWriteTime,&ftLastWriteTimeLocal); - - if(lpCreated) - { - FILETIME ftCreationTimeLocal; - FileTimeToLocalFileTime(&findFileData.ftCreationTime,&ftCreationTimeLocal); - - *lpCreated =ftCreationTimeLocal; - if(!ftCreationTimeLocal.dwLowDateTime && - !ftCreationTimeLocal.dwHighDateTime) - // Adjust time - *lpCreated =ftLastWriteTimeLocal; - } - - if(lpAccessed) - { - FILETIME ftLastAccessTimeLocal; - FileTimeToLocalFileTime(&findFileData.ftLastAccessTime,&ftLastAccessTimeLocal); - - *lpAccessed =ftLastAccessTimeLocal; - if(!ftLastAccessTimeLocal.dwLowDateTime && - !ftLastAccessTimeLocal.dwHighDateTime) - // Adjust time - *lpAccessed =ftLastWriteTimeLocal; - } - - if(lpModified) - *lpModified =ftLastWriteTimeLocal; - - return TRUE; -} - -//--------------------------------------------------------------------------- -// Post : Return creation time -// Task : Get the time this file/folder was created -//--------------------------------------------------------------------------- -FILETIME CPath::GetTimeCreated() const -{ - FILETIME file_time; - ZeroMemory(&file_time,sizeof(file_time)); - - GetTime(&file_time,NULL,NULL); - - return file_time; -} - -//--------------------------------------------------------------------------- -// Post : Return last access time -// Task : Get the time this file/folder was last accessed -//--------------------------------------------------------------------------- -FILETIME CPath::GetTimeLastAccessed() const -{ - FILETIME file_time; - ZeroMemory(&file_time,sizeof(file_time)); - - GetTime(NULL,&file_time,NULL); - - return file_time; -} - -//--------------------------------------------------------------------------- -// Post : Return last modification time -// Task : Get the time this file/folder was last changed -//--------------------------------------------------------------------------- -FILETIME CPath::GetTimeLastModified() const -{ - FILETIME file_time; - ZeroMemory(&file_time,sizeof(file_time)); - - GetTime(NULL,NULL,&file_time); - - return file_time; -} - -//--------------------------------------------------------------------------- -// Pre : All time parameters are supposed 2 be local times -// Post : Return TRUE on success -// Task : Set the creation, last acces and/or last modification time -//--------------------------------------------------------------------------- -BOOL CPath::SetTime(const FILETIME *lpCreated, const FILETIME *lpAccessed, const FILETIME *lpModified) -{ - if(!lpCreated && !lpAccessed && !lpModified) - // No time params specified - return FALSE; - - WIN32_FIND_DATA findFileData; - HANDLE hFind =FindFirstFile(m_strPath.c_str(),&findFileData); - if(hFind == INVALID_HANDLE_VALUE) - // Oops, no such file system object - return FALSE; - FindClose(hFind); - - if(lpCreated) - LocalFileTimeToFileTime(lpCreated,&findFileData.ftCreationTime); - if(lpAccessed) - LocalFileTimeToFileTime(lpAccessed,&findFileData.ftLastAccessTime); - if(lpModified) - LocalFileTimeToFileTime(lpModified,&findFileData.ftLastWriteTime); - - HANDLE hFile =CreateFile(m_strPath.c_str(),GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); - if(hFile != INVALID_HANDLE_VALUE) - { - SetFileTime(hFile,lpCreated ? &findFileData.ftCreationTime : NULL, - lpAccessed ? &findFileData.ftLastAccessTime : NULL, - lpModified ? &findFileData.ftLastWriteTime : NULL); - CloseHandle(hFile); - return TRUE; - } - - return FALSE; -} - -//--------------------------------------------------------------------------- -// Pre : lpCreated is supposed 2 be local time -// Post : Return TRUE on success -// Task : Set the file's creation time -//--------------------------------------------------------------------------- -BOOL CPath::SetTimeCreated(const FILETIME *lpCreated) -{ - return SetTime(lpCreated,NULL,NULL); -} - -//--------------------------------------------------------------------------- -// Pre : lpModified is supposed 2 be local time -// Post : Return TRUE on success -// Task : Set the file's creation time -//--------------------------------------------------------------------------- -BOOL CPath::SetTimeLastModified(const FILETIME *lpModified) -{ - return SetTime(NULL,NULL,lpModified); -} - -//--------------------------------------------------------------------------- -// Pre : lpAccessed is supposed 2 be local time -// Post : Return TRUE on success -// Task : Set the file's creation time -//--------------------------------------------------------------------------- -BOOL CPath::SetTimeLastAccessed(const FILETIME *lpAccessed) -{ - return SetTime(NULL,lpAccessed,NULL); -} - //------------------------------------------------------------- // Post : Return TRUE on success // Task : Delete file @@ -2167,15 +765,6 @@ BOOL CPath::Delete(BOOL bEvenIfReadOnly) const return DeleteFile(m_strPath.c_str()); } -//------------------------------------------------------------- -// Post : Return TRUE on success -// Task : Rename file -//------------------------------------------------------------- -BOOL CPath::Rename(LPCTSTR lpszNewPath) -{ - return MoveTo(lpszNewPath,FALSE); -} - //------------------------------------------------------------- // Post : Return TRUE on success, FALSE if there is such a target file // and we weren't granted permission 2 overwrite file or some error @@ -2369,80 +958,6 @@ BOOL CPath::ChangeDirectory() return SetCurrentDirectory(DriveDirectory.c_str()); } -//------------------------------------------------------------- -// Post : Return TRUE if deleted OK -// Task : Delete everything in the directory -//------------------------------------------------------------- -BOOL CPath::RemoveDirectoryContent() -{ - // Deleting the directory's content - // Iterate the content of the directory and delete it - stdstr filename; - CPath iterator(*this); - BOOL deleted_OK =TRUE; - - // Deleting all contained files - iterator.SetNameExtension(WILD_NAME_EXTENSION); - BOOL iterating =iterator.FindFirst(_A_NORMAL | _A_ARCH | _A_HIDDEN | _A_SYSTEM | _A_RDONLY); - while(iterating) - { - // Found something - deleted_OK =iterator.Delete(TRUE); - - if(!deleted_OK) - break; - - iterator.SetNameExtension(WILD_NAME_EXTENSION); - iterating =iterator.FindFirst(_A_NORMAL | _A_ARCH | _A_HIDDEN | _A_SYSTEM | _A_RDONLY); - } - - if(!deleted_OK) - return FALSE; - - // Deleting all contained directories - iterator.SetNameExtension(WILD_NAME_EXTENSION); - iterating =iterator.FindFirst(_A_HIDDEN | _A_SUBDIR); - while(iterating) - { - // Found something - deleted_OK =iterator.RemoveDirectory(TRUE); - - if(!deleted_OK) - break; - - iterator.SetNameExtension(WILD_NAME_EXTENSION); - iterator.UpDirectory(); - iterating =iterator.FindFirst(_A_HIDDEN | _A_SUBDIR); - } - - return deleted_OK; -} - -//------------------------------------------------------------- -// Post : Return TRUE if deleted OK -// Task : Remove the directory -//------------------------------------------------------------- -BOOL CPath::RemoveDirectory(BOOL bEvenIfNotEmpty) -{ - if(bEvenIfNotEmpty) - { - // Delete the directory's content - if(!RemoveDirectoryContent()) - return FALSE; - } - - // Make sure there is no enumeration in progress, - // otherwise we we'll get an error (sharing violation) because - // that search keeps an open handle for this directory - Exit(); - - // Deleting this directory (and only if it's empty) - stdstr DriveDirectory; - GetDriveDirectory(DriveDirectory); - - return ::RemoveDirectory(DriveDirectory.c_str()); -} - //------------------------------------------------------------- // Pre : If bCreateIntermediates is TRUE, create all eventually // missing parent directories too @@ -2595,24 +1110,4 @@ void CPath::EnsureLeadingBackslash(stdstr& Directory) const stdstr temp =Directory; Directory.Format(_T("%c%s"),DIRECTORY_DELIMITER,temp.c_str()); } -} - -//------------------------------------------------------------------------ -// Task : Return path with swapped polarity on all backslashes -//------------------------------------------------------------------------ -void CPath::GetAsInternetPath(stdstr& Directory) const -{ - Directory = m_strPath; - if(!Directory.empty()) - { - stdstr temp = Directory; - for (int idx = 0; idx < (int)temp.size(); idx++) - { - if (temp[idx]==_T('\\')) - temp[idx] = _T('/'); - } - Directory = temp; - } - else - Directory = _T("/"); -} +} \ No newline at end of file diff --git a/Source/Common/path.h b/Source/Common/path.h index f3193d72d..de1f8919c 100644 --- a/Source/Common/path.h +++ b/Source/Common/path.h @@ -35,41 +35,8 @@ class CPath public: enum DIR_CURRENT_DIRECTORY { CURRENT_DIRECTORY = 1 }; - enum DIR_WINDOWS_DIRECTORY { WINDOWS_DIRECTORY = 2 }; - enum DIR_SYSTEM_DIRECTORY { SYSTEM_DIRECTORY = 3 }; - enum DIR_SYSTEM32_DIRECTORY { SYSTEM32_DIRECTORY = 4 }; - enum DIR_SYSTEM_DRIVER_DIRECTORY { SYSTEM_DRIVER_DIRECTORY = 5 }; - enum DIR_SYSTEM_DRIVE_ROOT_DIRECTORY { SYSTEM_DRIVE_ROOT_DIRECTORY = 6 }; - enum DIR_MODULE_DIRECTORY { MODULE_DIRECTORY = 7 }; - enum DIR_MODULE_FILE { MODULE_FILE = 8 }; - - enum SpecialDirectoryType - { - TEMP_DIRECTORY, - PROGRAM_FILES_DIRECTORY, - COMMON_FILES_DIRECTORY, - ACCESSORIES_DIRECTORY, - MEDIA_DIRECTORY, - DEVICE_DIRECTORY, - USER_DESKTOP_DIRECTORY, - USER_FAVORITES_DIRECTORY, - USER_FONTS_DIRECTORY, - USER_NETHOOD_DIRECTORY, - USER_DOCUMENTS_DIRECTORY, - USER_RECENT_DIRECTORY, - USER_SENDTO_DIRECTORY, - USER_TEMPLATES_DIRECTORY, - USER_RECYCLE_DIRECTORY, - USER_APPLICATION_DATA_DIRECTORY, - USER_STARTMENU_DIRECTORY, - USER_STARTMENU_STARTUP_DIRECTORY, - USER_STARTMENU_PROGRAMS_DIRECTORY, - COMMON_DESKTOP_DIRECTORY, - COMMON_STARTMENU_DIRECTORY, - COMMON_STARTMENU_STARTUP_DIRECTORY, - COMMON_STARTMENU_PROGRAMS_DIRECTORY, - LAST_SPECIAL - }; + enum DIR_MODULE_DIRECTORY { MODULE_DIRECTORY = 2 }; + enum DIR_MODULE_FILE { MODULE_FILE = 3 }; enum { _A_ALLFILES = 0xFFFF }; /* Search Include all files */ @@ -93,16 +60,8 @@ public: CPath(const stdstr& strPath); CPath(const stdstr& strPath, LPCTSTR NameExten); CPath(const stdstr& strPath, const stdstr& NameExten); - CPath(SpecialDirectoryType sdt); - CPath(SpecialDirectoryType sdt, LPCTSTR NameExten ); - CPath(SpecialDirectoryType sdt, const stdstr& NameExten ); - + CPath(DIR_CURRENT_DIRECTORY sdt, LPCTSTR NameExten = NULL); - CPath(DIR_WINDOWS_DIRECTORY sdt, LPCTSTR NameExten = NULL); - CPath(DIR_SYSTEM_DIRECTORY sdt, LPCTSTR NameExten = NULL ); - CPath(DIR_SYSTEM32_DIRECTORY sdt, LPCTSTR NameExten = NULL); - CPath(DIR_SYSTEM_DRIVER_DIRECTORY sdt, LPCTSTR NameExten = NULL); - CPath(DIR_SYSTEM_DRIVE_ROOT_DIRECTORY sdt, LPCTSTR NameExten = NULL); CPath(DIR_MODULE_DIRECTORY sdt, LPCTSTR NameExten = NULL); CPath(DIR_MODULE_FILE sdt); @@ -122,8 +81,6 @@ public: operator stdstr&() { return m_strPath; } //Get path components - void GetDrive(stdstr& rDrive) const; - stdstr GetDrive(void) const; void GetDriveDirectory(stdstr& rDriveDirectory) const; stdstr GetDriveDirectory(void) const; void GetDirectory(stdstr& rDirectory) const; @@ -137,18 +94,14 @@ public: void GetCurrentDirectory(stdstr& rDrive) const; stdstr GetCurrentDirectory(void) const; void GetFullyQualified(stdstr& rFullyQualified) const; - void GetFullyQualifiedShort(stdstr& rFullyQualifiedShort) const; void GetComponents(stdstr* pDrive =NULL, stdstr* pDirectory =NULL, stdstr* pName =NULL, stdstr* pExtension =NULL) const; - void GetAsInternetPath(stdstr& Directory) const; //Get other state BOOL IsEmpty() const { return m_strPath.empty(); } BOOL IsRelative() const; - BOOL IsWild() const; - BOOL IsValid() const; // Checks lexical correctness only //Set path components void SetDrive(TCHAR chDrive); @@ -168,94 +121,28 @@ public: //Set whole path void Empty() { m_strPath.erase(); } - void SpecialDirectory(SpecialDirectoryType sdt); - void MakeRoot(); void CurrentDirectory(); - void WindowsDirectory(); - void SystemDirectory(); - void SystemDriveRootDirectory(); - void TempDirectory(); void Module(); void Module(HINSTANCE hInstance); void ModuleDirectory(); void ModuleDirectory(HINSTANCE hInstance); - void ProgramFilesDirectory(); // C:\Program Files - void CommonFilesDirectory(); // C:\Program Files\Common Files - void AccessoriesDirectory(); // C:\Program Files\Accessories - void MediaDirectory(); // C:\Windows\Media - void DeviceDirectory(); // C:\Windows\Inf - void UserDesktopDirectory(); - void UserFavoritesDirectory(); - void UserFontsDirectory(); - void UserNetworkNeighbourhoodDirectory(); - void UserDocumentsDirectory(); - void UserRecentDirectory(); - void UserSendToDirectory(); - void UserTemplatesDirectory(); - void UserRecycleBinDirectory(); - void UserApplicationDataDirectory(); - void UserStartMenuDirectory(); - void UserStartMenuStartupDirectory(); - void UserStartMenuProgramsDirectory(); - void CommonDesktopDirectory(); - void CommonStartMenuDirectory(); - void CommonStartMenuStartupDirectory(); - void CommonStartMenuProgramsDirectory(); - void WindowsProfile(); // Win.INI - void SystemProfile(); // System.INI - - BOOL CreateTempName(LPCTSTR lpcszPrefix); - BOOL CreateTempDir(LPCTSTR lpcszPrefix, UINT nRetries =100); - BOOL CreateRandomName(BOOL bMustNotExist =TRUE, UINT nRetries =1000); - BOOL CreateSimilarName(BOOL bMustNotExist =TRUE, UINT nRetries =1000); - - //Drive Information - UINT GetDriveType() const; - BOOL IsRemovableDrive() const { return GetDriveType()==DRIVE_REMOVABLE; } - BOOL IsCDRomDrive() const { return GetDriveType()==DRIVE_CDROM; } - BOOL IsNetworkDrive() const { return GetDriveType()==DRIVE_REMOTE; } - BOOL IsRAMDrive() const { return GetDriveType()==DRIVE_RAMDISK; } - BOOL IsFixedDrive() const { return GetDriveType()==DRIVE_FIXED; } - - ULONG DriveTotalSpaceBytes() const; - ULONG DriveFreeSpaceBytes() const; - ULONG GetDriveClusterSize() const; - BOOL GetDiskInfo(LPDWORD lpSectorsPerCluster, - LPDWORD lpBytesPerSector, - LPDWORD lpFreeClusters, - LPDWORD lpClusters) const; //Directory information BOOL IsDirectory() const; BOOL DirectoryExists() const; - BOOL IsDirectoryEmpty() const; //File Information BOOL IsFile() const { return !IsDirectory(); } BOOL Exists() const; - ULONG GetSize() const; - ULONG GetAttributes() const; - BOOL GetTime(FILETIME *lpCreated, FILETIME *lpAccessed, FILETIME *lpModified) const; - FILETIME GetTimeCreated() const; - FILETIME GetTimeLastModified() const; - FILETIME GetTimeLastAccessed() const; //Directory operations BOOL CreateDirectory(BOOL bCreateIntermediates =TRUE); - BOOL RemoveDirectory(BOOL bEvenIfNotEmpty =FALSE); - BOOL RemoveDirectoryContent(); BOOL ChangeDirectory(); //File operations BOOL Delete(BOOL bEvenIfReadOnly =TRUE) const; - BOOL Rename(LPCTSTR lpszNewPath); BOOL CopyTo(LPCTSTR lpcszTargetFile, BOOL bOverwrite =TRUE); BOOL MoveTo(LPCTSTR lpcszTargetFile, BOOL bOverwrite =TRUE); - BOOL SetAttributes(ULONG dwAttributes); - BOOL SetTime(const FILETIME *lpCreated, const FILETIME *lpAccessed, const FILETIME *lpModified); - BOOL SetTimeCreated(const FILETIME *lpCreated); - BOOL SetTimeLastModified(const FILETIME *lpModified); - BOOL SetTimeLastAccessed(const FILETIME *lpAccessed); //Finders BOOL FindFirst(ULONG dwAttributes =_A_NORMAL); @@ -267,10 +154,6 @@ public: private: BOOL AttributesMatch(ULONG dwTargetAttributes, ULONG dwFileAttributes); - BOOL ShellDirectory(int nShellFolderID); - BOOL ShellDirectory2(int nShellFolderID); - BOOL GetRegistryPath(HKEY hRootKey, LPCTSTR lpcszKeyName, LPCTSTR lpcszValueName, stdstr &strPath); - void cleanPathString(stdstr& rDirectory) const; void StripLeadingChar(stdstr& rText, TCHAR chLeading) const;