#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(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_