압축해제 프로그램 제작
- 이제 압축 해제 프로그램을 제작해보자.
- 여기서는 그냥 무압축된 zip파일을 해제해 보도록하겠다.
- 앞서 3번째 강좌 ( http://fehead.tistory.com/164 )에서 zip localheader file을 이용한 파일 리스트 보기 소스를 기억하는가?
- 거기 파일리스트를 출력하는 바로위에 아래 한줄만 추가해보자.
// 추가된소스 한줄
unzip(filename, data, l.compressed_size);
// 원래 소스
printf("%s\tCompressed size:%u\t Uncompressed size:%u\n",
filename, l.compressed_size, l.uncompressed_size);
unzip(filename, data, l.compressed_size);
// 원래 소스
printf("%s\tCompressed size:%u\t Uncompressed size:%u\n",
filename, l.compressed_size, l.uncompressed_size);
- 자 이제 위 내용을 main 함수위에 코딩하면된다.
// 압축파일 해제
void unzip(const char * filename, const char * data, ulong size)
{
// 파일을 연다.
FILE * file = fopen(filename, "w");
if(file == 0)
{
perror("fopen:");
return;
}
// 파일에 데이터를 쓴다.
fwrite(data, 1, size, file);
// 파일을 닫는다.
fclose(file);
}
void unzip(const char * filename, const char * data, ulong size)
{
// 파일을 연다.
FILE * file = fopen(filename, "w");
if(file == 0)
{
perror("fopen:");
return;
}
// 파일에 데이터를 쓴다.
fwrite(data, 1, size, file);
// 파일을 닫는다.
fclose(file);
}
# 컴파일
$ gcc -o tunzip tunzip.challo
# 테스트를 하기 위해 임시 디렉토리 생성
$ mkdir tmp
# test.zip 파일과 방금 만든 프로그램을 임시 디렉토리로 복사.
$ cp test.zip tunzip tmp
# 임시 디렉토리로 이동
$ cd tmp
$ ls -l
합계 12
-rw-r--r-- 1 fehead users 334 8월 18 18:18 test.zip
-rwxr-xr-x 1 fehead users 6446 8월 18 18:18 tunziphallo
# 프로그램 실행
$ ./tunzip
aa.txt Compressed size:16 Uncompressed size:16
bb.txt Compressed size:16 Uncompressed size:16
# 압축 풀린것 확인.
$ ls -l
합계 20
-rw-r--r-- 1 fehead users 16 8월 18 18:18 aa.txt
-rw-r--r-- 1 fehead users 16 8월 18 18:18 bb.txt
-rw-r--r-- 1 fehead users 334 8월 18 18:18 test.zip
-rwxr-xr-x 1 fehead users 6446 8월 18 18:18 tunzip
# 내용물 확인.
$ cat aa.txt
0123456789ABCDEF
$ gcc -o tunzip tunzip.challo
# 테스트를 하기 위해 임시 디렉토리 생성
$ mkdir tmp
# test.zip 파일과 방금 만든 프로그램을 임시 디렉토리로 복사.
$ cp test.zip tunzip tmp
# 임시 디렉토리로 이동
$ cd tmp
$ ls -l
합계 12
-rw-r--r-- 1 fehead users 334 8월 18 18:18 test.zip
-rwxr-xr-x 1 fehead users 6446 8월 18 18:18 tunziphallo
# 프로그램 실행
$ ./tunzip
aa.txt Compressed size:16 Uncompressed size:16
bb.txt Compressed size:16 Uncompressed size:16
# 압축 풀린것 확인.
$ ls -l
합계 20
-rw-r--r-- 1 fehead users 16 8월 18 18:18 aa.txt
-rw-r--r-- 1 fehead users 16 8월 18 18:18 bb.txt
-rw-r--r-- 1 fehead users 334 8월 18 18:18 test.zip
-rwxr-xr-x 1 fehead users 6446 8월 18 18:18 tunzip
# 내용물 확인.
$ cat aa.txt
0123456789ABCDEF