Files
Work/common/FINDDATA.HPP
2024-08-07 09:09:36 -04:00

186 lines
3.9 KiB
C++

#ifndef _COMMON_FINDDATA_HPP_
#define _COMMON_FINDDATA_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_SYSTEMTIME_HPP_
#include <common/systime.hpp>
#endif
#ifndef _COMMON_FILETIME_HPP_
#include <common/filetime.hpp>
#endif
class FindData : private WIN32_FIND_DATA
{
public:
enum FileAttributes{FileArchive=FILE_ATTRIBUTE_ARCHIVE,FileDirectory=FILE_ATTRIBUTE_DIRECTORY,
FileHidden=FILE_ATTRIBUTE_HIDDEN,FileNormal=FILE_ATTRIBUTE_NORMAL,
FileReadOnly=FILE_ATTRIBUTE_READONLY,FileSystem=FILE_ATTRIBUTE_SYSTEM,
FileTemporary=FILE_ATTRIBUTE_TEMPORARY};
FindData(void);
FindData(const FindData &someFindData);
virtual ~FindData();
WORD findFirst(const String &searchFileName,DWORD attributes=(DWORD)FileArchive);
WORD findNext(void);
FindData &operator=(const FindData &someFindData);
WORD operator==(const FindData &someFindData)const;
operator WIN32_FIND_DATA &(void);
DWORD attributes(void)const;
void attributes(DWORD attributes);
SystemTime creationTime(void)const;
void creationTime(const SystemTime &creationTime);
SystemTime lastAccessTime(void)const;
void lastAccessTime(const SystemTime &lastAccessTime);
SystemTime lastModifyTime(void)const;
void lastModifyTime(const SystemTime &lastModifyTime);
DWORD sizeHigh(void)const;
void sizeHigh(DWORD sizeHigh);
DWORD sizeLow(void)const;
void sizeLow(DWORD sizeLow);
String fileName(void)const;
void fileName(String fileName);
String altFileName(void)const;
void altFileName(String altFileName);
private:
void zeroInit(void);
void destroyFind(void);
HANDLE mhFindHandle;
};
inline
FindData::FindData(void)
: mhFindHandle(INVALID_HANDLE_VALUE)
{
zeroInit();
}
inline
FindData::FindData(const FindData &someFindData)
: mhFindHandle(INVALID_HANDLE_VALUE)
{
*this=someFindData;
}
inline
FindData::~FindData()
{
destroyFind();
}
inline
FindData::operator WIN32_FIND_DATA &(void)
{
return *this;
}
inline
DWORD FindData::attributes(void)const
{
return WIN32_FIND_DATA::dwFileAttributes;
}
inline
void FindData::attributes(DWORD attributes)
{
WIN32_FIND_DATA::dwFileAttributes=attributes;
}
inline
SystemTime FindData::creationTime(void)const
{
return (FileTime&)WIN32_FIND_DATA::ftCreationTime;
}
inline
void FindData::creationTime(const SystemTime &creationTime)
{
(FileTime&)WIN32_FIND_DATA::ftCreationTime=creationTime;
}
inline
SystemTime FindData::lastAccessTime(void)const
{
return (FileTime&)WIN32_FIND_DATA::ftLastAccessTime;
}
inline
void FindData::lastAccessTime(const SystemTime &lastAccessTime)
{
(FileTime&)WIN32_FIND_DATA::ftLastAccessTime=lastAccessTime;
}
inline
SystemTime FindData::lastModifyTime(void)const
{
return (FileTime&)WIN32_FIND_DATA::ftLastWriteTime;
}
inline
void FindData::lastModifyTime(const SystemTime &lastModifyTime)
{
(FileTime&)WIN32_FIND_DATA::ftLastWriteTime=lastModifyTime;
}
inline
DWORD FindData::sizeHigh(void)const
{
return WIN32_FIND_DATA::nFileSizeHigh;
}
inline
void FindData::sizeHigh(DWORD sizeHigh)
{
WIN32_FIND_DATA::nFileSizeHigh=sizeHigh;
}
inline
DWORD FindData::sizeLow(void)const
{
return WIN32_FIND_DATA::nFileSizeLow;
}
inline
void FindData::sizeLow(DWORD sizeLow)
{
WIN32_FIND_DATA::nFileSizeLow=sizeLow;
}
inline
String FindData::fileName(void)const
{
return WIN32_FIND_DATA::cFileName;
}
inline
void FindData::fileName(String fileName)
{
WORD nameLength(fileName.length());
if(fileName.isNull())return;
if(nameLength>=sizeof(WIN32_FIND_DATA::cFileName))fileName.length(sizeof(WIN32_FIND_DATA::cFileName)-1);
::strcpy(WIN32_FIND_DATA::cFileName,(LPSTR)fileName);
}
inline
String FindData::altFileName(void)const
{
return WIN32_FIND_DATA::cAlternateFileName;
}
inline
WORD FindData::findNext(void)
{
if(INVALID_HANDLE_VALUE==mhFindHandle)return FALSE;
return ::FindNextFile(mhFindHandle,&((WIN32_FIND_DATA&)*this));
}
inline
void FindData::zeroInit(void)
{
::memset(&((WIN32_FIND_DATA&)*this),0,sizeof(WIN32_FIND_DATA));
}
#endif