// 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