78 lines
1.4 KiB
C++
78 lines
1.4 KiB
C++
#include <cstdio>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include "Define.h"
|
|
|
|
int ZipArchiver();
|
|
|
|
int main()
|
|
{
|
|
std::printf("==================== Hello Zip! ====================\r\n");
|
|
int iRet = 0;
|
|
|
|
// Zip Format define check
|
|
size_t iSizeTest = sizeof(LocalFileHeader);
|
|
if (LOCAL_FILE_HEADER_BYTE != iSizeTest)
|
|
{
|
|
std::printf("1 Wrong Header Size : %d / %d \r\n", iSizeTest, LOCAL_FILE_HEADER_BYTE);
|
|
iRet = -1;
|
|
}
|
|
iSizeTest = sizeof(CentralDirectory);
|
|
if (CENTRAL_DIRECTORY_BYTE != iSizeTest)
|
|
{
|
|
std::printf("2 Wrong Header Size : %d / %d \r\n", iSizeTest, CENTRAL_DIRECTORY_BYTE);
|
|
iRet = -1;
|
|
}
|
|
iSizeTest = sizeof(EoCDRecord);
|
|
if (EOCD_BYTE != iSizeTest)
|
|
{
|
|
std::printf("3 Wrong Header Size : %d / %d \r\n", iSizeTest, EOCD_BYTE);
|
|
iRet = -1;
|
|
}
|
|
|
|
// Main Zip archive method
|
|
if (iRet != -1)
|
|
{
|
|
iRet = ZipArchiver();
|
|
}
|
|
|
|
return iRet;
|
|
}
|
|
|
|
int ZipArchiver()
|
|
{
|
|
LocalFileHeader LFHeader;
|
|
CentralDirectory CentDirec;
|
|
EoCDRecord ECDR;
|
|
|
|
using namespace std;
|
|
|
|
ifstream fileIn("MyZip.txt", ios::binary);
|
|
bool iRet = fileIn.is_open();
|
|
if (!iRet)
|
|
{
|
|
printf("File open failed");
|
|
}
|
|
else
|
|
{
|
|
// 파일 크기 계산
|
|
// seekg(offset, 목표점)
|
|
fileIn.seekg(0, ios::end);
|
|
streamsize fileInSize = fileIn.tellg();
|
|
// beg == begin
|
|
fileIn.seekg(0, ios::beg);
|
|
|
|
// TODO : Buffering 으로 구현.
|
|
// 메모리 할당
|
|
uint8_t* pFile = (uint8_t *)malloc(fileInSize);
|
|
|
|
// Read
|
|
fileIn.read((char *)pFile, fileInSize);
|
|
|
|
// Free
|
|
free(pFile);
|
|
}
|
|
|
|
return iRet;
|
|
}
|