1 // Windows/FileDir.h 2 3 #ifndef __WINDOWS_FILE_DIR_H 4 #define __WINDOWS_FILE_DIR_H 5 6 #include "../Common/MyString.h" 7 8 #include "FileIO.h" 9 10 namespace NWindows { 11 namespace NFile { 12 namespace NDir { 13 14 bool GetWindowsDir(FString &path); 15 bool GetSystemDir(FString &path); 16 17 bool SetDirTime(CFSTR path, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime); 18 bool SetFileAttrib(CFSTR path, DWORD attrib); 19 bool MyMoveFile(CFSTR existFileName, CFSTR newFileName); 20 21 #ifndef UNDER_CE 22 bool MyCreateHardLink(CFSTR newFileName, CFSTR existFileName); 23 #endif 24 25 bool RemoveDir(CFSTR path); 26 bool CreateDir(CFSTR path); 27 28 /* CreateComplexDir returns true, if directory can contain files after the call (two cases): 29 1) the directory already exists (network shares and drive paths are supported) 30 2) the directory was created 31 path can be WITH or WITHOUT trailing path separator. */ 32 33 bool CreateComplexDir(CFSTR path); 34 35 bool DeleteFileAlways(CFSTR name); 36 bool RemoveDirWithSubItems(const FString &path); 37 38 bool MyGetFullPathName(CFSTR path, FString &resFullPath); 39 bool GetFullPathAndSplit(CFSTR path, FString &resDirPrefix, FString &resFileName); 40 bool GetOnlyDirPrefix(CFSTR path, FString &resDirPrefix); 41 42 #ifndef UNDER_CE 43 44 bool SetCurrentDir(CFSTR path); 45 bool GetCurrentDir(FString &resultPath); 46 47 #endif 48 49 bool MyGetTempPath(FString &resultPath); 50 51 class CTempFile 52 { 53 bool _mustBeDeleted; 54 FString _path; DisableDeleting()55 void DisableDeleting() { _mustBeDeleted = false; } 56 public: CTempFile()57 CTempFile(): _mustBeDeleted(false) {} ~CTempFile()58 ~CTempFile() { Remove(); } GetPath()59 const FString &GetPath() const { return _path; } 60 bool Create(CFSTR pathPrefix, NIO::COutFile *outFile); // pathPrefix is not folder prefix 61 bool CreateRandomInTempFolder(CFSTR namePrefix, NIO::COutFile *outFile); 62 bool Remove(); 63 bool MoveTo(CFSTR name, bool deleteDestBefore); 64 }; 65 66 class CTempDir 67 { 68 bool _mustBeDeleted; 69 FString _path; 70 public: CTempDir()71 CTempDir(): _mustBeDeleted(false) {} ~CTempDir()72 ~CTempDir() { Remove(); } GetPath()73 const FString &GetPath() const { return _path; } DisableDeleting()74 void DisableDeleting() { _mustBeDeleted = false; } 75 bool Create(CFSTR namePrefix) ; 76 bool Remove(); 77 }; 78 79 #if !defined(UNDER_CE) 80 class CCurrentDirRestorer 81 { 82 FString _path; 83 public: 84 bool NeedRestore; 85 CCurrentDirRestorer()86 CCurrentDirRestorer(): NeedRestore(true) 87 { 88 GetCurrentDir(_path); 89 } ~CCurrentDirRestorer()90 ~CCurrentDirRestorer() 91 { 92 if (!NeedRestore) 93 return; 94 FString s; 95 if (GetCurrentDir(s)) 96 if (s != _path) 97 SetCurrentDir(_path); 98 } 99 }; 100 #endif 101 102 }}} 103 104 #endif 105