Home | History | Annotate | Download | only in Windows
      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;
     55   void DisableDeleting() { _mustBeDeleted = false; }
     56 public:
     57   CTempFile(): _mustBeDeleted(false) {}
     58   ~CTempFile() { Remove(); }
     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:
     71   CTempDir(): _mustBeDeleted(false) {}
     72   ~CTempDir() { Remove();  }
     73   const FString &GetPath() const { return _path; }
     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 
     86   CCurrentDirRestorer(): NeedRestore(true)
     87   {
     88     GetCurrentDir(_path);
     89   }
     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