== tar == 폴더 안에있는 tar실행 그 폴더를 tar하는것 {{{~cpp #include #include #include #include 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 #include #include #include 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하는것 - 문제점 1. tar할때 빈폴더는 tar가 되지 않는다 2. untar를 할경우 풀어놓을 폴더가 없을경우 에러 {{{~cpp #include #include #include #include #include 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