5128eecc9f 2011-02-23 kinaba: //--- K.I.LIB --- 5128eecc9f 2011-02-23 kinaba: // kl_file.h : file operations 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #ifndef AFX_KIFILE_H__7D126C1E_3E5C_476E_9A4E_81CA8055621D__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: #define AFX_KIFILE_H__7D126C1E_3E5C_476E_9A4E_81CA8055621D__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // バイナリファイル操作 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiFile 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: public: //-- static ---------------------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ファイルサイズ取得( 名前, エラー時に返したい値 ) 5128eecc9f 2011-02-23 kinaba: static unsigned long getSize( const char* fname, unsigned long err=0xffffffff ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: public: //-- 外向きインターフェイス -------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 開いて閉じて 5128eecc9f 2011-02-23 kinaba: bool open( const char* filename, bool read=true, bool create=true ); 5128eecc9f 2011-02-23 kinaba: void close(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 読んで書いて 5128eecc9f 2011-02-23 kinaba: unsigned long read( unsigned char* buf, unsigned long len ); 5128eecc9f 2011-02-23 kinaba: void write( const void* buf, unsigned long len ); 5128eecc9f 2011-02-23 kinaba: int getc(); 5128eecc9f 2011-02-23 kinaba: void putc( unsigned char c ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // シーク 5128eecc9f 2011-02-23 kinaba: void seekTo( unsigned long pos ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: if( !m_bReadMode ) flush(); 5128eecc9f 2011-02-23 kinaba: ::SetFilePointer( m_hFile, pos, NULL, FILE_BEGIN ); 5128eecc9f 2011-02-23 kinaba: if( m_bReadMode ) flush(); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: void seek( long pos ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: if( !m_bReadMode ) flush(); 5128eecc9f 2011-02-23 kinaba: ::SetFilePointer( m_hFile, 5128eecc9f 2011-02-23 kinaba: pos-(signed)m_nBufSize+(signed)m_nBufPos, NULL, 5128eecc9f 2011-02-23 kinaba: FILE_CURRENT ); 5128eecc9f 2011-02-23 kinaba: if( m_bReadMode ) flush(); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: unsigned long tell() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return ::SetFilePointer( m_hFile, 0, NULL, FILE_CURRENT ) 5128eecc9f 2011-02-23 kinaba: - m_nBufSize + m_nBufPos; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 情報取得 5128eecc9f 2011-02-23 kinaba: bool isOpened() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return m_hFile != INVALID_HANDLE_VALUE; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: unsigned long getSize( unsigned long* higher=NULL ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return ::GetFileSize( m_hFile, higher ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: bool isEOF() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return (m_nBufPos==0 && m_nBufSize==0); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: public: //-- 内部処理 ----------------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: kiFile() : kifile_bufsize( 65536 ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: m_hFile= INVALID_HANDLE_VALUE; 5128eecc9f 2011-02-23 kinaba: m_pBuf = new unsigned char[kifile_bufsize]; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: virtual ~kiFile() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: close(); 5128eecc9f 2011-02-23 kinaba: delete [] m_pBuf; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: 5128eecc9f 2011-02-23 kinaba: const int kifile_bufsize; 5128eecc9f 2011-02-23 kinaba: void flush(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: HANDLE m_hFile; 5128eecc9f 2011-02-23 kinaba: bool m_bReadMode; 5128eecc9f 2011-02-23 kinaba: unsigned char* m_pBuf; 5128eecc9f 2011-02-23 kinaba: unsigned long m_nBufSize, m_nBufPos; 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #endif