Files
2022-10-26 12:25:11 +08:00

326 lines
9.6 KiB
C++

#ifndef __WZFILEPACKER_H__
#define __WZFILEPACKER_H__
// wzFilePacker.h
#include <Windows.h>
#pragma warning(disable: 4786)
#include <vector>
#include <string>
#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<std::string> FileList;
typedef std::vector<std::string> 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__