/** * @file NFFilePtr.h * @brief FILE auto close class * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-04-02 */ #pragma once #include // standard I/O namespace Nave { /** * @class NFFilePtr * @brief FILE auto close class * @remarks NFFilePtr file(L"c:\\1.txt", L"rt"); \r\n * fgets(str, 128, file); \r\n * return; * @par * @author Edith * @date 2009-04-05 */ class NFFilePtr { public: /// NFFilePtr »ý¼ºÀÚ NFFilePtr() : m_pFile(NULL) { } /** * @brief ÆÄÀÏ ÀÚµ¿¿­±â »ý¼ºÀÚ * @param file ÆÄÀϸí * @param mode ÆÄÀÏ ¸ðµå */ NFFilePtr(LPCSTR file, LPCSTR mode) { m_pFile = fopen(file, mode); } /// NFFilePtr ¼Ò¸êÀÚ ~NFFilePtr() { if(m_pFile) fclose(m_pFile); m_pFile = NULL; } /** * @brief NFFilePtr1 = FilePtrW2 ÀÌÅÍ·¹ÀÌÅÍ * @warning NFFilePtr2´Â ´õÀÌ»ó »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù. */ NFFilePtr& operator=(NFFilePtr& _Right) throw() { Reset(_Right.Release()); return (*this); } /** * @brief NFFilePtr = FILE* ÀÌÅÍ·¹ÀÌÅÍ * @warning NFFilePtr¿¡¼­ ÀÚµ¿ fclose°¡ µË´Ï´Ù. \r\n * FILE*°´Ã¼¸¦ fcloseÇÏ¸é ¹®Á¦°¡ ¹ß»ýÇÒ ¼öÀÖ½À´Ï´Ù. */ NFFilePtr& operator=(FILE* _Right) throw() { Reset(_Right); return (*this); } /** * @brief FILE* Çüº¯È¯ ¿ÀÆÛ·¹ÀÌÅÍ ÀÔ´Ï´Ù. * @return ÇöÀçÀÇ ÆÄÀÏ Æ÷ÀÎÅÍ */ operator FILE*() const throw() { return m_pFile; } /** * @brief ÆÄÀÏ Æ÷ÀÎÅ͸¦ ÃʱâÈ­ ÇÕ´Ï´Ù. FILEÀÌ close µÇÁö ¾Ê½À´Ï´Ù. * @return ÇöÀçÀÇ ÆÄÀÏ Æ÷ÀÎÅÍ */ FILE* Release() { FILE* fp = m_pFile; m_pFile = NULL; return fp; } /** * @brief »õ·Î¿î °ªÀ¸·Î Àç¼³Á¤ÇÕ´Ï´Ù. ±âÁ¸ÀÇ FILEÀº close µË´Ï´Ù. * @param fp »õ·Î¿î ÆÄÀÏ Æ÷ÀÎÅÍ */ void Reset(LPCSTR file, LPCSTR mode) { if(m_pFile) fclose(m_pFile); m_pFile = fopen(file, mode); } /** * @brief »õ·Î¿î °ªÀ¸·Î Àç¼³Á¤ÇÕ´Ï´Ù. * ±âÁ¸ÀÇ FILEÀº close µË´Ï´Ù. * @param fp »õ·Î¿î ÆÄÀÏ Æ÷ÀÎÅÍ */ void Reset(FILE* fp) { if(m_pFile) fclose(m_pFile); m_pFile = fp; } /** * @brief ÆÄÀÏÀÇ ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù. * @return ÆÄÀÏÀÇ ±æÀÌ */ long Length() { fpos_t cuspos; if(fgetpos( m_pFile, &cuspos ) != 0) return -1; // error fseek( m_pFile, 0L, SEEK_END ); long length = ftell( m_pFile ); fsetpos(m_pFile, &cuspos); return length; } private: /// ÆÄÀÏ Æ÷ÀÎÅÍ FILE* m_pFile; }; }