1 // Windows/FileDir.h
2
3 #ifndef __WINDOWS_FILEDIR_H
4 #define __WINDOWS_FILEDIR_H
5
6 #include "../Common/MyString.h"
7 #include "Defs.h"
8
9 namespace NWindows {
10 namespace NFile {
11 namespace NDirectory {
12
13 #ifdef WIN_LONG_PATH
14 bool GetLongPaths(LPCWSTR s1, LPCWSTR s2, UString &d1, UString &d2);
15 #endif
16
17 bool MyGetWindowsDirectory(CSysString &path);
18 bool MyGetSystemDirectory(CSysString &path);
19 #ifndef _UNICODE
20 bool MyGetWindowsDirectory(UString &path);
21 bool MyGetSystemDirectory(UString &path);
22 #endif
23
24 bool SetDirTime(LPCWSTR fileName, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime);
25
26 bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes);
27 bool MyMoveFile(LPCTSTR existFileName, LPCTSTR newFileName);
28 bool MyRemoveDirectory(LPCTSTR pathName);
29 bool MyCreateDirectory(LPCTSTR pathName);
30 bool CreateComplexDirectory(LPCTSTR pathName);
31 bool DeleteFileAlways(LPCTSTR name);
32 bool RemoveDirectoryWithSubItems(const CSysString &path);
33
34 #ifndef _UNICODE
35 bool MySetFileAttributes(LPCWSTR fileName, DWORD fileAttributes);
36 bool MyMoveFile(LPCWSTR existFileName, LPCWSTR newFileName);
37 bool MyRemoveDirectory(LPCWSTR pathName);
38 bool MyCreateDirectory(LPCWSTR pathName);
39 bool CreateComplexDirectory(LPCWSTR pathName);
40 bool DeleteFileAlways(LPCWSTR name);
41 bool RemoveDirectoryWithSubItems(const UString &path);
42 #endif
43
44 bool GetOnlyDirPrefix(LPCTSTR fileName, CSysString &resultName);
45 bool GetOnlyName(LPCTSTR fileName, CSysString &resultName);
46 #ifdef UNDER_CE
47 bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath);
48 bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, int &fileNamePartStartIndex);
49 #else
50 bool MyGetShortPathName(LPCTSTR longPath, CSysString &shortPath);
51
52 bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath, int &fileNamePartStartIndex);
53 bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath);
54 #ifndef _UNICODE
55 bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath,
56 int &fileNamePartStartIndex);
57 bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath);
58 bool GetOnlyName(LPCWSTR fileName, UString &resultName);
59 bool GetOnlyDirPrefix(LPCWSTR fileName, UString &resultName);
60 #endif
61
MySetCurrentDirectory(LPCTSTR path)62 inline bool MySetCurrentDirectory(LPCTSTR path)
63 { return BOOLToBool(::SetCurrentDirectory(path)); }
64 bool MyGetCurrentDirectory(CSysString &resultPath);
65 #ifndef _UNICODE
66 bool MySetCurrentDirectory(LPCWSTR path);
67 bool MyGetCurrentDirectory(UString &resultPath);
68 #endif
69
70 bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, CSysString &resultPath, UINT32 &filePart);
71 #ifndef _UNICODE
72 bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath, UINT32 &filePart);
73 #endif
74
MySearchPath(LPCTSTR path,LPCTSTR fileName,LPCTSTR extension,CSysString & resultPath)75 inline bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, CSysString &resultPath)
76 {
77 UINT32 value;
78 return MySearchPath(path, fileName, extension, resultPath, value);
79 }
80
81 #ifndef _UNICODE
MySearchPath(LPCWSTR path,LPCWSTR fileName,LPCWSTR extension,UString & resultPath)82 inline bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath)
83 {
84 UINT32 value;
85 return MySearchPath(path, fileName, extension, resultPath, value);
86 }
87 #endif
88
89 #endif
90
91 bool MyGetTempPath(CSysString &resultPath);
92 #ifndef _UNICODE
93 bool MyGetTempPath(UString &resultPath);
94 #endif
95
96 UINT MyGetTempFileName(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath);
97 #ifndef _UNICODE
98 UINT MyGetTempFileName(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath);
99 #endif
100
101 class CTempFile
102 {
103 bool _mustBeDeleted;
104 CSysString _fileName;
105 public:
CTempFile()106 CTempFile(): _mustBeDeleted(false) {}
~CTempFile()107 ~CTempFile() { Remove(); }
DisableDeleting()108 void DisableDeleting() { _mustBeDeleted = false; }
109 UINT Create(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath);
110 bool Create(LPCTSTR prefix, CSysString &resultPath);
111 bool Remove();
112 };
113
114 #ifdef _UNICODE
115 typedef CTempFile CTempFileW;
116 #else
117 class CTempFileW
118 {
119 bool _mustBeDeleted;
120 UString _fileName;
121 public:
CTempFileW()122 CTempFileW(): _mustBeDeleted(false) {}
~CTempFileW()123 ~CTempFileW() { Remove(); }
DisableDeleting()124 void DisableDeleting() { _mustBeDeleted = false; }
125 UINT Create(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath);
126 bool Create(LPCWSTR prefix, UString &resultPath);
127 bool Remove();
128 };
129 #endif
130
131 bool CreateTempDirectory(LPCTSTR prefixChars, CSysString &dirName);
132
133 class CTempDirectory
134 {
135 bool _mustBeDeleted;
136 CSysString _tempDir;
137 public:
GetPath()138 const CSysString &GetPath() const { return _tempDir; }
CTempDirectory()139 CTempDirectory(): _mustBeDeleted(false) {}
~CTempDirectory()140 ~CTempDirectory() { Remove(); }
141 bool Create(LPCTSTR prefix) ;
Remove()142 bool Remove()
143 {
144 if (!_mustBeDeleted)
145 return true;
146 _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir);
147 return (!_mustBeDeleted);
148 }
DisableDeleting()149 void DisableDeleting() { _mustBeDeleted = false; }
150 };
151
152 #ifdef _UNICODE
153 typedef CTempDirectory CTempDirectoryW;
154 #else
155 class CTempDirectoryW
156 {
157 bool _mustBeDeleted;
158 UString _tempDir;
159 public:
GetPath()160 const UString &GetPath() const { return _tempDir; }
CTempDirectoryW()161 CTempDirectoryW(): _mustBeDeleted(false) {}
~CTempDirectoryW()162 ~CTempDirectoryW() { Remove(); }
163 bool Create(LPCWSTR prefix) ;
Remove()164 bool Remove()
165 {
166 if (!_mustBeDeleted)
167 return true;
168 _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir);
169 return (!_mustBeDeleted);
170 }
DisableDeleting()171 void DisableDeleting() { _mustBeDeleted = false; }
172 };
173 #endif
174
175 }}}
176
177 #endif
178