很不错										
					
	
	
	
	      
				
											我也写了个,传上来大家看下:
/***********
文件分割
***********/ 
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define MAX 1024
int in_name(char *p,int len);    //安全输入文件名 
void getname_suf(char* input,char* outname,char* suffix);    //取出文件名和扩展名
void divide(char *inputfile,int count);        //文件分割子程序 
int main(void)
{
    char inputfile[80];
    int count;
    puts("请输入要分割的文件:"); 
    in_name(inputfile,78);    //分割后文件名比原文件名长 
     puts("请输入分割后的文件个数:");
     scanf("%d",&count);
    while(count<2)
    {
        puts("分割个数不能小于2,请重新输入:");
        scanf("%d",&count);
    }
    divide(inputfile,count);
    printf("\n\n            文件被成功分割成%d个,按ENTER键退出!\n",count); 
    getch();
    getch();
    return 0;
}
int in_name(char *p,int len)
{    int i=1;
    char ch;
    while(((ch=getchar())!='\n')&&(i<len))
    {    
        i++;
        if(ch=='\"') continue;
        else *p++=ch;
    }
    *p='\0';
    return --i;
}
void getname_suf(char* input,char* outname,char* suffix)
{
    char *p,flag=0;
    int len;
    len=strlen(input)-1;
    p=input+len;
    while(*p!='\\' && len-->=0)
    {
        if(*p--=='.')
        {
            flag=1;
            break;
        }
    }
    if(flag)
    {    ++p;
        while(input!=p)
            *outname++=*input++;    
        *outname='\0';
        while((*suffix++=*p++)!='\0');
    }
    else 
    {
        strcpy(outname,input);    
        *suffix='\0';
    }
}
void divide(char *inputfile,int count)
{
    FILE *fin,*fout;
    int read_count,     //每个数据块读取次数
        i,j,
        left,            //每个数据块读取整数次缓冲区大小余下的
        last;            //读最后一个数据块余下的 
    char outname[80],    //生成文件的文件名
         name[80],        //生成文件的文件名(不含扩展名) 
         buf[MAX],        //缓冲区大小 
         flag=0,        //生成文件大小是否是缓冲区大小整数倍 
         lastflag=0,    //最后一个文件小是否是缓冲区大小整数倍
         suffix[10],    //扩展名 
         ch[5];
    long size,            //要分割的文件大小
         each_size;     //生成文件大小
    if((fin=fopen(inputfile,"rb"))==NULL)
    {
        puts("要分割的文件打不开!");
        getch();
        exit(1);
    }
    fseek(fin,0L,SEEK_END);
    size=ftell(fin);        //求文件大小 
    rewind(fin);
    each_size=size/count;
    if(size%count!=0)
    {    
        lastflag=1;    
        last=size%count;
    }
    read_count=each_size/MAX;
    if(each_size%MAX!=0)
    {
        flag=1;
        left=each_size%MAX;
    }
    getname_suf(inputfile,name,suffix);
    for(i=0;i<count;i++)
    {
        strcpy(outname,name);
        sprintf(ch,"%d",i+1);                
        strcat(outname,ch);
        strcat(outname,suffix);
        if((fout=fopen(outname,"wb"))==NULL)
        {    
            puts("输出文件打不开!");
            getch(); 
            exit(1);
        }
        for(j=0;j<read_count;j++)
        {    
            fread(buf,MAX,1,fin);
            fwrite(buf,MAX,1,fout);
        }
        if(flag)
        {    fread(buf,left,1,fin);
            fwrite(buf,left,1,fout);
        }    
        if(i==count-1&&lastflag)
        {
            fread(buf,last,1,fin);
            fwrite(buf,last,1,fout);
        }
        fclose(fout);    
    }    
    fclose(fin);
}										
					
	
	
	
	      


 
											





 
	    

 
	
