C写的 文件分割 //老早就说要上传的,可是一直没机会,对以前的承诺说声"对不起"
/***********************************************************************************************/
/* 文件分割的编制 filecut.c */
/* 思路: 将文件依据参数来划分成若干个文件,以达到文件分割的目的 */
/* 文件的合并:利用dos的copy命令作一个批处理cat.bat */
/***********************************************************************************************/
//程序入口:
//char filename[256]:文件名称
//long int cutsize:分割文件块的大小
//程序返回
//0文件倒写成功
//1打开欲倒写文件操作失败
//2打开临时文件操作失败
//注意事项:
//程序使用临时文件为:jz_cut.tmp,如在操作文件同目录下有该文件,则覆盖!
//编制时间:
//2000.4TC2.0初稿,2002.4BCB5.5终稿
//LeftRight:
//BigMouthZ编制,谨请广大编程爱好者们使用!
//慎重申明:
//本人不负责一切因使用本程序而产生的后果!请勿用于非法用途!
//联系方式:
//E_Mail: verybigmouthz@sohu.com
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
# include "stdio.h"
# include "string.h"
# include "stdlib.h"
# include "math.h"
main(int argc,char *argv[])
{ FILE *fp,*fg;
char filename[256],createfile[256];
long int cutsize;
printf("Input cut filename:\n"); scanf("%s",filename);
printf("Input Cut K_Bytes:\n"); scanf("%ld",&cutsize);
cutsize*=1024l;
if (cutsize==0) return 1;
if ( (fp=fopen(filename,"rb"))==NULL) return 2;
char tmp[6],tempfile[14];
strcpy(tmp,"0"); strcpy(tempfile,"_c_");
strcat(tempfile,tmp); strcat(tempfile,".tmp");
char ch;
long int m,tmpnum;
ch=fgetc(fp);
while(1)
{ fg=fopen(tempfile,"wb");
m=0l;
while ( (!feof(fp)) && (m++ < cutsize))
{
fputc(ch,fg); ch=fgetc(fp);
}
if (feof(fp)) {fclose(fp); fclose(fg); break;}
fclose(fg);
tmpnum=atoi(tmp); itoa(++tmpnum,tmp,10);
strcpy(tempfile,"_c_");
strcat(tempfile,tmp); strcat(tempfile,".tmp");
}
/******************************************************************/
int rowsize=25,x_break=0,i=0,j=0,k;
fp=fopen("_cut.bat","wb");
while(!x_break)
{ if (tmpnum < rowsize) { rowsize = tmpnum;x_break=1;}
else tmpnum -= rowsize;
fputs("\r\n@copy /b ",fp);
for(k = 0;k < rowsize; k++)
{ itoa(i++,tmp,10); strcpy(tempfile,"_c_");
strcat(tempfile,tmp); strcat(tempfile,".tmp+");
fputs(tempfile,fp);
}
itoa(i++,tmp,10); strcpy(tempfile,"_c_");
strcat(tempfile,tmp); strcat(tempfile,".tmp ");
fputs(tempfile,fp);
itoa(j++,tmp,10); strcpy(tempfile,"_s_");
strcat(tempfile,tmp); strcat(tempfile,".tmp");
fputs(tempfile,fp); fputs(">nul",fp);
}
fputs("\r\n@copy /b ",fp);
for(k=0;k<j-1;k++)
{ itoa(k,tmp,10); strcpy(tempfile,"_s_");
strcat(tempfile,tmp); strcat(tempfile,".tmp+");
fputs(tempfile,fp);
}
itoa(k,tmp,10); strcpy(tempfile,"_s_");
strcat(tempfile,tmp); strcat(tempfile,".tmp ");
fputs(tempfile,fp); fputs(filename,fp);
fputs(">nul",fp);
fputs("\r\n@del _c_*.tmp",fp);
fputs("\r\n@del _s_*.tmp",fp);
fputs("\r\n@del _cut.bat",fp);
fclose(fp);
return 0;
}
//---------------------------------------------------------------------------