Artifact f917f310296a724b53b0501fb4c3e0e6a2079672
#ifndef _KILIB_FILE_H_
#define _KILIB_FILE_H_
#include "types.h"
#include "memory.h"
#ifndef __ccdoc__
namespace ki {
#endif
//=========================================================================
//@{ @pkg ki.StdLib //@}
//@{
// 簡易ファイル読込
//
// ファイルマッピングを用いるので、扱いが簡単でわりと高速です。
// ただし困ったことに、4GBまでしか開けません。
//@}
//=========================================================================
class FileR : public Object
{
public:
FileR();
~FileR();
//@{
// 開く
// @param fname ファイル名
// @return 開けたかどうか
//@}
bool Open( const TCHAR* fname );
//@{
// 閉じる
//@}
void Close();
public:
//@{ ファイルサイズ //@}
ulong size() const;
//@{ ファイル内容をマップしたアドレス取得 //@}
const uchar* base() const;
private:
HANDLE handle_;
HANDLE fmo_;
ulong size_;
const void* basePtr_;
private:
NOCOPY(FileR);
};
//-------------------------------------------------------------------------
inline ulong FileR::size() const
{ return size_; }
inline const uchar* FileR::base() const
{ return static_cast<const uchar*>(basePtr_); }
//=========================================================================
//@{
// 簡易ファイル書き込み
//
// てきとーにバッファリングしつつ。
//@}
//=========================================================================
class FileW : public Object
{
public:
FileW();
~FileW();
//@{ 開く //@}
bool Open( const TCHAR* fname, bool creat=true );
//@{ 閉じる //@}
void Close();
//@{ 書く //@}
void Write( const void* buf, ulong siz );
//@{ 一文字書く //@}
void WriteC( uchar ch );
public:
void Flush();
private:
const int BUFSIZE;
HANDLE handle_;
uchar* const buf_;
ulong bPos_;
private:
NOCOPY(FileW);
};
//=========================================================================
} // namespace ki
#endif // _KILIB_FILE_H_