📄 rleunzip.cpp
字号:
// rleunzip.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <stdio.h>
char contents[10000000];
char unziped[10000000];
void unzip(char *zipFileName);
void unzipDir(ifstream &zipfile, char *dirName, long number);
void unzipFile(ifstream &zipfile, char *fileName, long length);
void unzip(char *source, long sourcelen, char * dest, long & destlen);
int main(int argc, char* argv[])
{
if(argc!=2) return -1;
unzip(argv[1]);
return 0;
}
void unzip(char *zipFileName ){
ifstream zipfile(zipFileName, ios::ate|ios::binary);
char fileType;
char fileName[1000];
long length;
zipfile.seekg(0,ios::beg);
zipfile.read(reinterpret_cast<char *>(&fileType),1);
zipfile.read(reinterpret_cast<char *>(fileName),256);
zipfile.read(reinterpret_cast<char *>(&length),sizeof(long));
if(fileType == 'f')
unzipFile(zipfile, fileName,length);
else unzipDir(zipfile,fileName,length);
zipfile.close();
}
void unzipDir(ifstream &zipfile, char *dirName, long number){
int i;
cout << "dir =" << dirName << " " << number << endl;
if(dirName[strlen(dirName)-1] == '*'){
dirName[strlen(dirName)-1] = '\0' ;
CreateDirectory(dirName, NULL);
}
for(i=0;i<number;i++){
char type;
char fileName[1000];
long length;
zipfile.read(reinterpret_cast<char *>(&type),sizeof(char));
zipfile.read(reinterpret_cast<char *>(fileName),256);
zipfile.read(reinterpret_cast<char *>(&length),sizeof(long));
if(type == 'f')
unzipFile(zipfile, fileName,length);
else unzipDir(zipfile,fileName,length);
}
}
void unzipFile(ifstream &zipfile, char *fileName, long length){
cout << "file " << fileName << endl;
ofstream fout(fileName, ios::out|ios::binary);
zipfile.read(reinterpret_cast<char *>(contents),length);
long destlen;
unzip(contents, length, unziped, destlen);
fout.write(reinterpret_cast<const char *>(unziped),destlen);
fout.close();
}
void unzip(char *source, long sourcelen, char * dest, long & destlen){
long i;
destlen = 0;
for(i=0;i<sourcelen;i=i+2){
int count = (int)source[i];
char content = source[i+1];
for(int j=0;j<count;j++){
dest[destlen] = content;
destlen ++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -