#include #include #include #include /********************************* *********************************/ void main(int argc,char **argv) { FILE *fin,*fout; //ファイル入力用、ファイル出力用 int c; //c=fgets(fin)、sprintf(buf,"%c",c) int r=0; //改行の数を示す変数 char cr[6]; //末尾の改行数を取る配列 char cs[9]; //上の偽装ファイルのサイズバージョン int ir,is; //改行数数値化した数、サイズ数値化した数を入れる int size=0; if(argc >= 5){ printf("コピー : fin_fout コピー元ファイル名 コピー後ファイル名\n"); printf("偽装 : fin_fout 偽装ファイル名 c 表面化するファイル\n"); printf("偽装解除 : fin_fout 偽装ファイル名\n"); } if(argc == 3){ //コピー if((fin = fopen(*(argv+1),"rb")) == NULL){ printf("ファイルが存在しない\n"); exit(234); } fout = fopen(*(argv+2),"wb"); //filename1をfilename2の下に隠す while((c=fgetc(fin)) != EOF){ fputc(c,fout); } } if(argc == 4){ //偽装 if((fin = fopen(*(argv+1),"rb")) == NULL){ printf("ファイルが存在しない\n"); exit(234); } //偽装ファイルのサイズをとる while((c=fgetc(fin)) != EOF){ size++; } fseek(fin,0,SEEK_SET); //読み書き&上書き用に開く fout = fopen(*(argv+3),"rb"); //改行数取得 while((c=fgetc(fout)) != EOF){ if(c=='\n') r++; } //上書き用にバイナリで開く fout = fopen(*(argv+3),"ab"); //filename1とfilename2の境界挿入 fputs("\n0123456789abcdefghijklmnopqrstuvwxyz",fout); while((c=fgetc(fin)) != EOF){ fputc(c,fout); } //改行の数を五文字で先行0詰めして書き込む fprintf(fout,"%05d",r); //さらに偽装ファイルのサイズを先行0詰め8桁書き込む(ほぼ1Mまで) fprintf(fout,"%08d",size); } if(argc == 2){ //偽装解除 if((fin = fopen(*(argv+1),"rb")) == NULL){ printf("ファイルが存在しない\n"); exit(234); } fout = fopen("kaijo.txt","wb"); //改行数取出し&数値化 fseek(fin,-13,SEEK_END); fgets(cr,6,fin); ir=atoi(cr); //printf("偽装改行の数 %d\n",ir); //偽装したときのファイルのサイズをとる fseek(fin,-8,SEEK_END); fgets(cs,9,fin); is=atoi(cs); //printf("取得ファイルサイズ %d\n",is); //改行取り出しのために進ませたfinを先頭に戻す fseek(fin,0,SEEK_SET); //偽装の改行分飛びぬけ while((c=fgetc(fin)) != EOF){ if(c=='\n'){ if(r==ir) break; r++; } } //境界で使った文字数ほど移動させる fseek(fin,36,SEEK_CUR); //偽装したときのファイルサイズの回数のみループ //つまりファイルに付加した改行、サイズ数値を読み込ませない for(int i=0;i