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