| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3219 人关注过本帖, 2 人收藏
标题:超强文件剪切与合并器(可以处理任何格式的文件,文件大小不大于1TB)
只看楼主 加入收藏
笨者天下
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-4-7
收藏
得分:0 
很不错
2008-12-13 14:44
howacter
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-12-14
收藏
得分:0 
我也写了个,传上来大家看下:
/***********
文件分割
***********/
#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);
}
2008-12-14 03:47
brokensea
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2007-10-14
收藏
得分:0 
这个,文件分割可以实现吗?
要怎么弄呢?

brokensea~~
Just try try try and try
2008-12-14 13:39
快速回复:超强文件剪切与合并器(可以处理任何格式的文件,文件大小不大于1TB)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017096 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved