blob: a1fd0f0729c40c16de87880c1ea035f647c4c859 [file] [log] [blame]
// Windows/FileFind.h
#ifndef __WINDOWS_FILEFIND_H
#define __WINDOWS_FILEFIND_H
#include "../Common/MyString.h"
#include "FileName.h"
#include "Defs.h"
#include <sys/types.h> /* for DIR */
#include <dirent.h>
namespace NWindows {
namespace NFile {
namespace NFind {
namespace NAttributes
{
inline bool IsReadOnly(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_READONLY) != 0; }
inline bool IsHidden(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_HIDDEN) != 0; }
inline bool IsSystem(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_SYSTEM) != 0; }
inline bool IsDir(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_DIRECTORY) != 0; }
inline bool IsArchived(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ARCHIVE) != 0; }
inline bool IsCompressed(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_COMPRESSED) != 0; }
inline bool IsEncrypted(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ENCRYPTED) != 0; }
}
class CFileInfoBase
{
bool MatchesMask(UINT32 mask) const { return ((Attrib & mask) != 0); }
public:
UInt64 Size;
FILETIME CTime;
FILETIME ATime;
FILETIME MTime;
DWORD Attrib;
bool IsDevice;
bool IsDir() const { return MatchesMask(FILE_ATTRIBUTE_DIRECTORY); }
};
class CFileInfo: public CFileInfoBase
{
public:
AString Name; // FIXME CSysString Name;
bool IsDots() const;
bool Find(LPCSTR wildcard);
};
// FIXME #ifdef _UNICODE
// typedef CFileInfo CFileInfoW;
// #else
class CFileInfoW: public CFileInfoBase
{
public:
UString Name;
bool IsDots() const;
bool Find(LPCWSTR wildcard);
};
// #endif
class CFindFile
{
friend class CEnumerator;
DIR *_dirp;
AString _pattern;
AString _directory;
public:
bool IsHandleAllocated() const { return (_dirp != 0); }
CFindFile(): _dirp(0) {}
~CFindFile() { Close(); }
// bool FindFirst(LPCTSTR wildcard, CFileInfo &fileInfo);
bool FindFirst(LPCSTR wildcard, CFileInfo &fileInfo);
bool FindNext(CFileInfo &fileInfo);
// FIXME #ifndef _UNICODE
bool FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo);
bool FindNext(CFileInfoW &fileInfo);
// FIXME #endif
bool Close();
};
bool FindFile(LPCSTR wildcard, CFileInfo &fileInfo);
bool DoesFileExist(LPCSTR name);
bool DoesDirExist(LPCTSTR name);
bool DoesFileOrDirExist(LPCSTR name);
// #ifndef _UNICODE
bool FindFile(LPCWSTR wildcard, CFileInfoW &fileInfo);
bool DoesFileExist(LPCWSTR name);
bool DoesDirExist(LPCWSTR name);
bool DoesFileOrDirExist(LPCWSTR name);
// #endif
class CEnumerator
{
CFindFile _findFile;
AString _wildcard; // FIXME CSysString _wildcard;
bool NextAny(CFileInfo &fileInfo);
public:
CEnumerator(): _wildcard(NName::kAnyStringWildcard) {}
// FIXME CEnumerator(const CSysString &wildcard): _wildcard(wildcard) {}
CEnumerator(const AString &wildcard): _wildcard(wildcard) {}
bool Next(CFileInfo &fileInfo);
bool Next(CFileInfo &fileInfo, bool &found);
};
// FIXME #ifdef _UNICODE
// typedef CEnumerator CEnumeratorW;
// #else
class CEnumeratorW
{
CFindFile _findFile;
UString _wildcard;
bool NextAny(CFileInfoW &fileInfo);
public:
CEnumeratorW(): _wildcard(NName::kAnyStringWildcard) {}
CEnumeratorW(const UString &wildcard): _wildcard(wildcard) {}
bool Next(CFileInfoW &fileInfo);
bool Next(CFileInfoW &fileInfo, bool &found);
};
// FIXME #endif
}}}
#endif