// Windows/FileDir.h #ifndef __WINDOWS_FILEDIR_H #define __WINDOWS_FILEDIR_H #include "../Common/MyString.h" #include "Defs.h" namespace NWindows { namespace NFile { namespace NDirectory { #ifdef WIN_LONG_PATH bool GetLongPaths(LPCWSTR s1, LPCWSTR s2, UString &d1, UString &d2); #endif bool MyGetWindowsDirectory(CSysString &path); bool MyGetSystemDirectory(CSysString &path); #ifndef _UNICODE bool MyGetWindowsDirectory(UString &path); bool MyGetSystemDirectory(UString &path); #endif bool SetDirTime(LPCWSTR fileName, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime); bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes); bool MyMoveFile(LPCTSTR existFileName, LPCTSTR newFileName); bool MyRemoveDirectory(LPCTSTR pathName); bool MyCreateDirectory(LPCTSTR pathName); bool CreateComplexDirectory(LPCTSTR pathName); bool DeleteFileAlways(LPCTSTR name); bool RemoveDirectoryWithSubItems(const CSysString &path); #ifndef _UNICODE bool MySetFileAttributes(LPCWSTR fileName, DWORD fileAttributes); bool MyMoveFile(LPCWSTR existFileName, LPCWSTR newFileName); bool MyRemoveDirectory(LPCWSTR pathName); bool MyCreateDirectory(LPCWSTR pathName); bool CreateComplexDirectory(LPCWSTR pathName); bool DeleteFileAlways(LPCWSTR name); bool RemoveDirectoryWithSubItems(const UString &path); #endif bool GetOnlyDirPrefix(LPCTSTR fileName, CSysString &resultName); bool GetOnlyName(LPCTSTR fileName, CSysString &resultName); #ifdef UNDER_CE bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath); bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, int &fileNamePartStartIndex); #else bool MyGetShortPathName(LPCTSTR longPath, CSysString &shortPath); bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath, int &fileNamePartStartIndex); bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath); #ifndef _UNICODE bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, int &fileNamePartStartIndex); bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath); bool GetOnlyName(LPCWSTR fileName, UString &resultName); bool GetOnlyDirPrefix(LPCWSTR fileName, UString &resultName); #endif inline bool MySetCurrentDirectory(LPCTSTR path) { return BOOLToBool(::SetCurrentDirectory(path)); } bool MyGetCurrentDirectory(CSysString &resultPath); #ifndef _UNICODE bool MySetCurrentDirectory(LPCWSTR path); bool MyGetCurrentDirectory(UString &resultPath); #endif bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, CSysString &resultPath, UINT32 &filePart); #ifndef _UNICODE bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath, UINT32 &filePart); #endif inline bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, CSysString &resultPath) { UINT32 value; return MySearchPath(path, fileName, extension, resultPath, value); } #ifndef _UNICODE inline bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath) { UINT32 value; return MySearchPath(path, fileName, extension, resultPath, value); } #endif #endif bool MyGetTempPath(CSysString &resultPath); #ifndef _UNICODE bool MyGetTempPath(UString &resultPath); #endif UINT MyGetTempFileName(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath); #ifndef _UNICODE UINT MyGetTempFileName(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath); #endif class CTempFile { bool _mustBeDeleted; CSysString _fileName; public: CTempFile(): _mustBeDeleted(false) {} ~CTempFile() { Remove(); } void DisableDeleting() { _mustBeDeleted = false; } UINT Create(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath); bool Create(LPCTSTR prefix, CSysString &resultPath); bool Remove(); }; #ifdef _UNICODE typedef CTempFile CTempFileW; #else class CTempFileW { bool _mustBeDeleted; UString _fileName; public: CTempFileW(): _mustBeDeleted(false) {} ~CTempFileW() { Remove(); } void DisableDeleting() { _mustBeDeleted = false; } UINT Create(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath); bool Create(LPCWSTR prefix, UString &resultPath); bool Remove(); }; #endif bool CreateTempDirectory(LPCTSTR prefixChars, CSysString &dirName); class CTempDirectory { bool _mustBeDeleted; CSysString _tempDir; public: const CSysString &GetPath() const { return _tempDir; } CTempDirectory(): _mustBeDeleted(false) {} ~CTempDirectory() { Remove(); } bool Create(LPCTSTR prefix) ; bool Remove() { if (!_mustBeDeleted) return true; _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir); return (!_mustBeDeleted); } void DisableDeleting() { _mustBeDeleted = false; } }; #ifdef _UNICODE typedef CTempDirectory CTempDirectoryW; #else class CTempDirectoryW { bool _mustBeDeleted; UString _tempDir; public: const UString &GetPath() const { return _tempDir; } CTempDirectoryW(): _mustBeDeleted(false) {} ~CTempDirectoryW() { Remove(); } bool Create(LPCWSTR prefix) ; bool Remove() { if (!_mustBeDeleted) return true; _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir); return (!_mustBeDeleted); } void DisableDeleting() { _mustBeDeleted = false; } }; #endif }}} #endif