Files
smartservice_native/hdssd/huslib/File.h
T
2026-05-20 03:08:08 +09:00

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_