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