#ifndef __WZFILEPACKER_H__ #define __WZFILEPACKER_H__ // wzFilePacker.h #include #pragma warning(disable: 4786) #include #include #define PACKFILE_OPEN_READONLY 0x00000001 #define PACKFILE_OPEN_UPDATE 0x00000002 #define PACKFILE_OPEN_CREATE 0x00000004 #define PACKFILE_OPEN_DIRECTORY 0x00000008 #define PACKFILE_ATTRIBUTE_READONLY 0x00000001 #define PACKFILE_ATTRIBUTE_DIRECTORY 0x00000002 typedef struct FileProperties { FILETIME Time; DWORD dwAttributeFlags; ULONGLONG dwSize; char Name[1024]; } FileProperties; typedef std::vector FileList; typedef std::vector FolderList; #define WM_PROGRESS WM_USER+927 #define PACK_CLASS class CPackFile #ifdef _DYNAMIC_LIB #define PACK_CLASS class __declspec(dllexport) CPackFile #endif class CAutoFree { public: CAutoFree() {}; ~CAutoFree(); }; extern CAutoFree autofree; class CPackFile { public: static BOOL GetFindFileNameInPackFile(LPCTSTR lpcFileName, LPTSTR lpPackFileName); void SetHwnd(HWND hWnd); /*//////////////////////////////////////////////////////////////////////// Func : RemoveDirectory ret : BOOL (Æú´õ »èÁ¦ ¼º°ø½Ã TRUE ½ÇÆÐ½Ã FALSE param1 : lpPathName (»èÁ¦ÇÒ PackingÆÄÀϳ»ÀÇ Æú´õ¸í) desc : PackingµÈ ÆÄÀÏ ³»¿¡¼­ ƯÁ¤ Æú´õ¸¦ »èÁ¦ÇÒ ¶§ »ç¿ëÇÑ´Ù. /////////////////////////////////////////////////////////////////////////*/ BOOL RemoveDirectory(LPCTSTR lpPathName); /*//////////////////////////////////////////////////////////////////////// Func : AddFile ret : BOOL (ÆÄÀÏ Ãß°¡ ¼º°ø½Ã TRUE ½ÇÆÐ½Ã FALSE param1 : lpSourcePath (ÆÄÀÏÀ» º¹»çÇÒ ½ÇÁ¦ °æ·Î) param2 : lpTargetPath (ÆÄÀÏÀÌ º¹»çµÉ PackingÆÄÀϳ»ÀÇ °æ·Î) desc : PackingµÈ ÆÄÀÏ ³»¿¡¼­ ƯÁ¤ Æú´õ¿¡ ÆÄÀÏÀ» º¹»çÇØ ³Ö´Â´Ù. /////////////////////////////////////////////////////////////////////////*/ BOOL AddFile(LPCTSTR lpSourcePath, LPCTSTR lpTargetPath); // BOOL AddFile(LPCTSTR lpSourcePath, LPCTSTR lpTargetPath); CPackFile(); ~CPackFile(); ////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////// Func : Open ret : HANDLE (PackingµÈ ÆÄÀÏÀÇ ÇÚµé) param1 : pszPackFilePath (PackingÆÄÀÏÀÇ °æ·Î) param2 : pszEncryptionKey (Ű) param3 : dwOpenModeFlags (Open½Ã Ç÷¡±×) desc : PackingµÈ ÆÄÀÏ¿¡ Á¢±ÙÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. /////////////////////////////////////////////////////////////////////////*/ HANDLE Open(LPCTSTR pszPackFilePath, LPCTSTR pszEncryptionKey = NULL, DWORD dwOpenModeFlags = PACKFILE_OPEN_READONLY | PACKFILE_OPEN_DIRECTORY); void Close(); ////////////////////////////////////////////////////////////////////////// // implemented HANDLE CreateFile(LPCTSTR lpFileName, ULONGLONG ulReservedSize); /*//////////////////////////////////////////////////////////////////////// Func : OpenFile ret : HANDLE (PackingµÈ ÆÄÀϳ»ºÎÀÇ Æ¯Á¤ ÆÄÀÏÀÇ ÇÚµé) param1 : lpFileName (PackingÆÄÀϳ»ºÎ¿¡¼­ ƯÁ¤ ÆÄÀÏÀÇ °æ·Î) param2 : dwOpenModeFlags (Open½Ã Ç÷¡±×) desc : PackingµÈ ÆÄÀÏ¿¡¼­ ƯÁ¤ ÆÄÀÏ¿¡ Á¢±ÙÇϱâ À§ÇØ »ç¿ë. /////////////////////////////////////////////////////////////////////////*/ HANDLE OpenFile( LPCTSTR lpFileName, // file name DWORD dwOpenModeFlags ); /*//////////////////////////////////////////////////////////////////////// Func : DeleteFile ret : BOOL (ÆÄÀÏ »èÁ¦°¡ ¼º°øÇß´ÂÁö ¿©ºÎ) param1 : lpFileName (PackingÆÄÀϳ»ºÎ¿¡¼­ ƯÁ¤ ÆÄÀÏÀÇ °æ·Î) desc : PackingµÈ ÆÄÀÏ¿¡¼­ ƯÁ¤ ÆÄÀÏÀ» »èÁ¦Çϱâ À§ÇØ »ç¿ë. /////////////////////////////////////////////////////////////////////////*/ BOOL DeleteFile( LPCTSTR lpFileName // file name ); /*//////////////////////////////////////////////////////////////////////// Func : CloseFile ret : N/a param1 : hFile (PackingÆÄÀϳ»ºÎ¿¡¼­ ƯÁ¤ ÆÄÀÏÀÇ ÇÚµé) desc : PackingµÈ ÆÄÀÏ¿¡¼­ ƯÁ¤ ÆÄÀÏÀ» ¿­°í ´Ù½Ã ´ÝÀ» ¶§ »ç¿ë /////////////////////////////////////////////////////////////////////////*/ void CloseFile(HANDLE hFile); // handle to file /*//////////////////////////////////////////////////////////////////////// Func : FileExists ret : BOOL ÆÄÀÏ È¤Àº Æú´õ°¡ Á¸ÀçÇÏ´ÂÁö ¿©ºÎ. param1 : lpFileName (PackingÆÄÀϳ»ºÎ¿¡¼­ ƯÁ¤ ÆÄÀÏȤÀº Æú´õ¸í) desc : PackingµÈ ÆÄÀÏ¿¡¼­ ƯÁ¤ ÆÄÀÏÀ̳ª Æú´õ°¡ Á¸ÀçÇÏ´ÂÁö °Ë»ç /////////////////////////////////////////////////////////////////////////*/ BOOL FileExists(LPCTSTR lpFileName); // not yet implemented BOOL RenameFile( LPCTSTR lpFileName, LPCTSTR lpNewFileName); // not yet implemented BOOL CreateDirectory(LPCTSTR lpPathName); ////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////// Func : GetFileProperties ret : BOOL ÆÄÀÏ ¼Ó¼º °¡Á®¿À±â ¼º°ø¿©ºÎ param1 : hFile (¼Ó¼ºÀ» °¡Á®¿Ã ÆÄÀÏÀÇ ÇÚµé) param2 : lpFileProp (°¡Á®¿Ã ÆÄÀÏÀÇ ¼Ó¼º) desc : PackingµÈ ÆÄÀÏ¿¡¼­ ƯÁ¤ ÆÄÀÏÀÇ ¼Ó¼ºÁ¤º¸ °¡Á®¿À±â. /////////////////////////////////////////////////////////////////////////*/ BOOL GetFileProperties(HANDLE hFile, FileProperties* lpFileProp); /*//////////////////////////////////////////////////////////////////////// Func : ReadFile ret : BOOL ÆÄÀÏ Àб⠿©ºÎ. param1 : hFile (ÆÄÀÏÀÇ ÇÚµé) param2 : lpBuffer (¹öÆÛ) param3 : nNUmberofBytesToRead ¹öÆÛÅ©±â desc : ƯÁ¤ÆÄÀÏÀ» Àд´Ù. /////////////////////////////////////////////////////////////////////////*/ BOOL ReadFile( HANDLE hFile, // handle to file LPVOID lpBuffer, // data buffer DWORD nNumberOfBytesToRead // number of bytes to read ); /*//////////////////////////////////////////////////////////////////////// Func : WriteFile ret : BOOL ÆÄÀÏ ¾²±â ¿©ºÎ. param1 : hFile (ÆÄÀÏÀÇ ÇÚµé) param2 : lpBuffer (¹öÆÛ) param3 : nNUmberofBytesToRead ¹öÆÛÅ©±â desc : ƯÁ¤ÆÄÀÏ¿¡ ¾´´Ù.¤¤ /////////////////////////////////////////////////////////////////////////*/ BOOL WriteFile( HANDLE hFile, // handle to file LPCVOID lpBuffer, // data buffer DWORD nNumberOfBytesToWrite // number of bytes to write ); /*//////////////////////////////////////////////////////////////////////// Func : GetFileSize ret : BOOL ÆÄÀÏ Å©±â °¡Á®¿À±â ¼º°ø¿©ºÎ param1 : hFile (ÆÄÀÏÀÇ ÇÚµé) param2 : lpFileSize ÆÄÀÏÅ©±â/ desc : ƯÁ¤ÆÄÀÏÀÇ Å©±â¸¦ °¡Á®¿Â´Ù. /////////////////////////////////////////////////////////////////////////*/ BOOL GetFileSize(HANDLE hFile, ULONGLONG* lpFileSize); /*//////////////////////////////////////////////////////////////////////// Func : GetFileSize ret : BOOL ÆÄÀÏ ¿ÀÇÁ¼Â °¡Á®¿À±â ¼º°ø¿©ºÎ param1 : hFile (ÆÄÀÏÀÇ ÇÚµé) param2 : lpFilePosition ÆÄÀÏ¿ÀÇÁ¼Â desc : ƯÁ¤ÆÄÀÏÀÇ ¿ÀÇÁ¼ÂÀ» °¡Á®¿Â´Ù. /////////////////////////////////////////////////////////////////////////*/ BOOL GetFilePointer(HANDLE hFile, ULONGLONG* lpFilePosition); /*//////////////////////////////////////////////////////////////////////// Func : SetFilePointer ret : BOOL ÆÄÀÏ ¿ÀÇÁ¼Â ¼³Á¤Çϱ⠼º°ø¿©ºÎ param1 : hFile (ÆÄÀÏÀÇ ÇÚµé) param2 : lpFilePosition ÆÄÀÏ¿ÀÇÁ¼Â desc : ƯÁ¤ÆÄÀÏÀÇ ¿ÀÇÁ¼ÂÀ» ¼ÂÆÃÇÑ´Ù. /////////////////////////////////////////////////////////////////////////*/ BOOL SetFilePointer(HANDLE hFile, // handle to file ULONGLONG lDistanceToMove, // bytes to move pointer DWORD dwMoveMethod ); // starting point /*//////////////////////////////////////////////////////////////////////// Func : IsEOF ret : BOOL ÆÄÀÏÀÇ ³¡Àΰ¡ È®ÀÎ. param1 : hFile (ÆÄÀÏÀÇ ÇÚµé) desc : ƯÁ¤ÆÄÀÏÀÇ ¿ÀÇÁ¼ÂÀÌ ÆÄÀÏÀÇ ³¡Àΰ¡ È®ÀÎ. /////////////////////////////////////////////////////////////////////////*/ BOOL IsEOF(HANDLE hFile); ////////////////////////////////////////////////////////////////////////// // File Finder /*//////////////////////////////////////////////////////////////////////// Func : FindFile ret : BOOL ÆÄÀÏÀÇ ³¡Àΰ¡ È®ÀÎ. param1 : hFile (ÆÄÀÏÀÇ ÇÚµé) param2 : FileSpec param3 : fileList param4 bRecursive desc : ƯÁ¤ÆÄÀÏ¿¡¼­ ÆÄÀϸ®½ºÆ® °¡Á®¿À±â. /////////////////////////////////////////////////////////////////////////*/ BOOL FindFile(HANDLE hFile, LPCTSTR FileSpec, FileList& fileList, FolderList& folderList, BOOL bRecursive = FALSE); /*//////////////////////////////////////////////////////////////////////// Func : MurgeFile ret : BOOL ÆÄÀÏ º´ÇÕ°á°ú hAddFilePath : º´ÇÕµÉ ÆÄÀÏ ÇÚµé bOverWrite : °°Àº °æ·ÎÀÇ ÆÄÀÏ Ã³¸® true: µ¤¾î¾´´Ù. false: skip ÇÑ´Ù. desc : hAddFile ÇÚµéÀÇ ÆÐÅ·ÆÄÀÏÀ» Àڽſ¡°Ô º´ÇÕ½ÃŲ´Ù. /////////////////////////////////////////////////////////////////////////*/ BOOL MurgeFile(HANDLE hAddFile, BOOL bOverWrite); //Extract File BOOL ExtractFile(HANDLE hFile, LPCTSTR lpSrcFile, LPCTSTR lpTarFile); //Extract all BOOL ExtractAll(HANDLE hFile, LPCTSTR lpTarFile); //HeaderEncrypt. static BOOL EncryptHdr(LPTSTR lpOldWpkPath); HANDLE IsFileOpen() { return m_hFile; } TCHAR* GetCurrentOpenFile() { return lstrlen(m_szFilePath) > 0 ? m_szFilePath : NULL; } void WriteHeader(TCHAR *lpOldWpkPath,int iSignature, int iVersion); private: inline void UpdateVfsInfo(); static inline void CONVERT_PATHCHAR(LPTSTR lpStr); HANDLE CreateFinder(HANDLE hFile, LPCTSTR FileSpec); void DestroyFinder(HANDLE hFinder); BOOL FinderGetNextFile(HANDLE hFinder); BOOL FinderGetProperties(HANDLE hFinder, FileProperties* lpFileProp); HANDLE m_hFile; HWND g_Hwnd; TCHAR m_szFilePath[1024]; }; ////////////////////////////////////////////////////////////////////////// //}; #endif //__WZFILEPACKER_H__