CMCore/inc/hgl/io/FileAccess.h

84 lines
4.7 KiB
C
Raw Normal View History

2019-08-19 19:19:58 +08:00
#ifndef HGL_IO_FILE_ACCESS_INCLUDE
#define HGL_IO_FILE_ACCESS_INCLUDE
2020-09-03 15:52:46 +08:00
#include<hgl/type/String.h>
2019-08-19 19:19:58 +08:00
#include<hgl/io/SeekAccess.h>
#include<sys/stat.h>
namespace hgl
{
namespace io
{
2020-09-03 15:39:00 +08:00
enum class FileOpenMode ///文件访问模式枚举
2019-08-19 19:19:58 +08:00
{
2020-09-03 15:39:00 +08:00
None=0,
2019-08-19 19:19:58 +08:00
2020-09-03 15:39:00 +08:00
Create, ///<创建文件,如存在则失败
CreateTrunc, ///<强制创建,如存在则抹掉
CreateTemp,
OnlyRead, ///<只读方式
OnlyWrite, ///<只写方式
ReadWrite, ///<可读可写
Append, ///<追加模式
2019-08-19 19:19:58 +08:00
2020-09-03 15:39:00 +08:00
End
2019-08-19 19:19:58 +08:00
};//enum FileOpenMode
/**
* 访
*/
class FileAccess ///文件访问实例管理类
{
protected:
OSString filename;
int fp;
struct_stat64 file_state;
FileOpenMode mode;
public:
FileAccess();
virtual ~FileAccess();
2020-09-03 15:39:00 +08:00
virtual bool Open (const OSString &,FileOpenMode fom); ///<以指定模式打开一个文件
virtual bool Create (const OSString &fn){return Open(fn,FileOpenMode::Create);} ///<创建一个新文件,如文件已存在则创建失败
virtual bool CreateTrunc (const OSString &fn){return Open(fn,FileOpenMode::CreateTrunc);} ///<创建一个新文件,如文件已存在则抹消它
virtual bool OpenRead (const OSString &fn){return Open(fn,FileOpenMode::OnlyRead);} ///<以只读模式打开一个文件
virtual bool OpenWrite (const OSString &fn){return Open(fn,FileOpenMode::OnlyWrite);} ///<以只写模式打开一个文件
virtual bool OpenReadWrite (const OSString &fn){return Open(fn,FileOpenMode::ReadWrite);} ///<以读写模式打开一个文件
virtual bool CreateTemp (); ///<创建一个临时文件
2019-08-19 19:19:58 +08:00
virtual void Close(); ///<关闭文件
virtual void CloseRead(); ///<仅关闭读取
virtual void CloseWrite(); ///<仅关闭写入
virtual int GetFileHandle()const{return fp;}
virtual bool CanRead()const; ///<文件是否可读
virtual bool CanPeek()const{return(CanRead()&&CanSeek());} ///<文件是否可预读
virtual bool CanWrite()const; ///<文件是否可写
virtual bool CanSeek()const; ///<文件是否可定位访问指针
virtual bool CanRestart()const{return CanSeek();} ///<文件是否可复位访问
virtual bool CanSize()const{return(true);} ///<文件是否可取得长度
2020-09-03 15:39:00 +08:00
virtual int64 Seek(int64,SeekOrigin=SeekOrigin::Begin); ///<定位访问指针
2019-08-19 19:19:58 +08:00
virtual int64 Tell()const; ///<取得访问指针位置
virtual int64 GetSize(); ///<取得文件长度
virtual bool Restart(); ///<复位访问指针
virtual int64 Read(void *,int64); ///<读取指定长度数据
virtual int64 Peek(void *,int64); ///<预读指定长度数据
virtual int64 Write(const void *,int64); ///<写入指定长度数据
virtual int64 AvailableRead(); ///<剩下的可读数据
virtual int64 Read(int64,void *,int64); ///<在指定位置读取指定长度的数据
virtual int64 Write(int64,const void *,int64); ///<在指定位置写入指定长度的数据
};//class FileAccess
}//namespace io
}//namespace hgl
#endif//HGL_IO_FILE_ACCESS_INCLUDE