131 lines
2.2 KiB
C++
131 lines
2.2 KiB
C++
|
|
#ifndef FILE__H_
|
|
#define FILE__H_
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
|
|
class HFile
|
|
{
|
|
public:
|
|
enum
|
|
{
|
|
FMODE_CREATE = 0x0001,
|
|
FMODE_RDONLY = 0x0002,
|
|
FMODE_WRONLY = 0x0004,
|
|
FMODE_RW = 0x0008
|
|
};
|
|
|
|
static off_t GetSize(const char * pszFileName)
|
|
{
|
|
struct stat statTemp;
|
|
stat(pszFileName, &statTemp);
|
|
|
|
return statTemp.st_size;
|
|
}
|
|
|
|
////
|
|
|
|
HFile()
|
|
{
|
|
m_fdFile = -1;
|
|
}
|
|
|
|
~HFile()
|
|
{
|
|
Close();
|
|
}
|
|
|
|
inline int GetFile();
|
|
|
|
inline bool Open(const char * pszFileName, int nMode, bool bIsContinue = false, bool bIsBinary = true);
|
|
inline void Close();
|
|
|
|
inline int Read(void * buffer, unsigned int count);
|
|
inline int ReadString(char * buffer, unsigned int count);
|
|
inline int Write(const void * buffer, unsigned int count);
|
|
|
|
private:
|
|
int m_fdFile;
|
|
};
|
|
|
|
inline int HFile::GetFile() { return m_fdFile; }
|
|
|
|
inline bool HFile::Open(const char * pszFileName, int nMode, bool bIsContinue, bool bIsBinary)
|
|
{
|
|
int oflag = 0;
|
|
|
|
if ((nMode & FMODE_CREATE) == FMODE_CREATE)
|
|
oflag = O_CREAT;
|
|
|
|
if ((nMode & FMODE_RDONLY) == FMODE_RDONLY)
|
|
oflag |= O_RDONLY;
|
|
else if ((nMode & FMODE_WRONLY) == FMODE_WRONLY)
|
|
oflag |= O_WRONLY;
|
|
else
|
|
oflag |= O_RDWR;
|
|
|
|
if (bIsContinue == false && ((nMode & FMODE_CREATE) == FMODE_CREATE))
|
|
oflag |= O_TRUNC;
|
|
|
|
#ifdef _WIN32
|
|
if (bIsBinary)
|
|
oflag |= O_BINARY;
|
|
else
|
|
oflag |= O_TEXT;
|
|
|
|
m_fdFile = open(pszFileName, oflag, S_IREAD | S_IWRITE);
|
|
#else
|
|
m_fdFile = open(pszFileName, oflag, S_IREAD | S_IWRITE | S_IRGRP | S_IROTH);
|
|
#endif
|
|
|
|
if (m_fdFile == -1)
|
|
return false;
|
|
|
|
if (bIsContinue && ((nMode & FMODE_WRONLY) == FMODE_WRONLY || (nMode & FMODE_RW) == FMODE_RW))
|
|
lseek(m_fdFile, 0L, SEEK_END);
|
|
|
|
return true;
|
|
}
|
|
|
|
inline void HFile::Close()
|
|
{
|
|
if (m_fdFile != -1)
|
|
{
|
|
close(m_fdFile);
|
|
m_fdFile = -1;
|
|
}
|
|
}
|
|
|
|
inline int HFile::Read(void * buffer, unsigned int count)
|
|
{
|
|
if (m_fdFile == -1)
|
|
return -1;
|
|
|
|
return read(m_fdFile, buffer, count);
|
|
}
|
|
|
|
inline int HFile::ReadString(char * buffer, unsigned int count)
|
|
{
|
|
if (m_fdFile == -1)
|
|
return -1;
|
|
|
|
int nResult = read(m_fdFile, buffer, count);
|
|
if (nResult > 0)
|
|
buffer[nResult] = '\0';
|
|
|
|
return nResult;
|
|
}
|
|
|
|
inline int HFile::Write(const void * buffer, unsigned int count)
|
|
{
|
|
if (m_fdFile == -1)
|
|
return -1;
|
|
|
|
return write(m_fdFile, buffer, count);
|
|
}
|
|
|
|
#endif // FILE__H_
|