File Annotation

Not logged in
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