== tar ==
tar 그 tar
tar 그 tar
~cpp
#include<iostream>
#include<stdio.h>
#include<io.h>
#include<stdlib.h>
using namespace std;
void main(){
_finddata_t data_dir;
int h;
int char_cpy;
FILE *read_f,*write_f;
if((write_f = fopen("Debug.tar","wb"))==NULL){
printf(" .33");
return ;
}
if(!(-1==(h =_findfirst("tar\*",&data_dir))))
do
{
if((data_dir.attrib & _A_SUBDIR) != 0) continue;
char fileName[1024];
sprintf(fileName, "..\tar\%s", data_dir.name);
if((read_f = fopen(fileName,"rb"))==NULL){
printf(" .");
return ;
}
fwrite(data_dir.name, 270, 1, write_f);
fprintf(write_f,"%d ",data_dir.size);
while(!(EOF == (char_cpy = fgetc(read_f) ))){
fputc(char_cpy,write_f);
}
fclose(read_f);
}while(!(_findnext(h,&data_dir)));
else printf("There is no serching!");
fclose(write_f);
}
== untar ==
tar tar ( untar )
~cpp
#include<iostream>
#include<stdio.h>
#include<io.h>
#include<stdlib.h>
using namespace std;
void main(){
char fileName[270];
char fileRoot[1024];
int output_size;
int char_cpy;
FILE *read_f,*write_f;
if((read_f = fopen("..\devil25_tar\Debug.tar","rb"))==NULL){
printf(" .(1)\n");
return ;
}
do
{
if (0 == fread(fileName, 270,1, read_f)) break;
sprintf(fileRoot, "..\devil26_untar\untar\%s", fileName);
if((write_f = fopen(fileRoot,"wb"))==NULL)
{
printf(" .(2)\n");
return ;
}
fscanf(read_f,"%d ",&output_size);
while(output_size--)
{
char_cpy = fgetc(read_f) ;
fputc(char_cpy,write_f);
}
fclose(write_f);
}while(1);
fclose(read_f);
}
== tar&untar ==
tar 고 그 경 과 tar
-
2. untar 경 경
~cpp
#include<iostream>
#include<stdio.h>
#include<io.h>
#include<stdlib.h>
#include<FCNTL.H>
using namespace std;
FILE *archive, *item;
void check_dir(char *dir);
int tar(char *file);
int untar(char *file);
int main(int argc, char *argv[])
{
int h;
_finddata_t data_dir;
if(argc==2) untar(argv[1]);
else if(argc>2) // tar
{
if((archive = fopen(argv[1],"wb"))==NULL)
{
printf(" .");
return 0;
}
for(int i = 2; i<argc;i++)
{
if(argv[1]==argv[i]) continue; //
if(!(-1==(h =_findfirst(argv[i],&data_dir))))
{
// argv[i]
//
if((data_dir.attrib & _A_SUBDIR) != 0) check_dir(argv[i]);
else tar(argv[i]); //tar 겨 과
}
}
fclose(archive);
}
else cout << "devil27_tar_untar [] []... .\n" << endl;
return 0;
}
void check_dir(char *dir)
{
_finddata_t data_dir;
char path[512];
int find_bool;
char dir_ex[512];
strcpy(dir_ex, dir);
strcat(dir_ex, "\*.*");
if(!(-1==(find_bool =_findfirst(dir_ex, &data_dir))))
{
do
{
sprintf(path, "%s\%s", dir , data_dir.name);
if(!strcmp(data_dir.name, ".") || !strcmp(data_dir.name, "..")) continue;
else if(data_dir.attrib & _A_SUBDIR) check_dir(path);
else tar(path);
} while(!(_findnext(find_bool, &data_dir)));
}
}
int tar(char *file)
{
char buffer[260];
long size;
if((item = fopen(file,"rb"))==NULL)
{
printf(" .\n");
return 0;
}
size = _filelength(_fileno(item));
fwrite(file, sizeof(char), 512, archive);
fprintf(archive, "%d ", size);
while(1)
{
if(!fread(buffer, 256, 1, item)) break;
fwrite(buffer, 256, 1, archive);
}
fclose(item);
return 0;
}
int untar(char *file)
{
char buffer[260];
int size;
char path[512];
if((archive = fopen(file,"rb"))==NULL)
{
printf(" .\n");
return 0;
}
while(!feof(archive))
{
if(!fread(path, 512, 1, archive)) break;
if((item =fopen(path,"wb"))==NULL)
{
printf(" .\n");
return 0;
}
fscanf(archive, "%d ", &size);
while(1)
{
if(!fread(buffer, 256, 1, archive)) break;
fwrite(buffer, 256, 1, item);
}
_chsize(_fileno(item), size);
fclose(item);
}
fclose(archive);
return 0;
}










