用C语言 将一个文件分成固定大小的几个文件。

用C语言 将一个文件分成固定大小的几个文件。
就好像这里有一个850kb的文件。写一个程序将他分成每一个是200kb的文件,最后的就最后一个文件。
那就会分成5个文件,4个200kb,一个50kb。
但是要写出,获取,读出,得到大小,创建,写入。
求救。

输入文件名叫 abc.txt 你可以改名。
输出文件名叫 aaX.txt X=0,1,2,3....
单个文件大小 one_size, 你可以 更改大小。

#include<stdio.h>
main(){
FILE *fp, *fout;
char nameout[80];
int i,j,k,n;
long size, one_size=1024;
char *buff;
// one_size=one_size * 0.1; //你可以 更改大小
fp = fopen ("abc.txt","rb");
if (fp==NULL) { printf("Error opening file"); return 0;}
fseek (fp, 0, SEEK_END); // non-portable
size=ftell (fp);
printf ("Size of abc.txt: %d bytes.\n",size); //得到大小
rewind(fp);
n=size/one_size;
buff = (char*)malloc(sizeof(char)*one_size);
for (i=0;i<n;i++)
{
sprintf(nameout,"aa%d.txt",i);
fout = fopen(nameout,"wb");
k = fread (buff,1,one_size,fp);
//if (k != one_size) {printf("read err\n"); return (0);}
fwrite(buff,1,one_size,fout);
fclose(fout);
printf("output in %s\n",nameout);
}; // for i
j = size % one_size;
if (j!=0) {
sprintf(nameout,"aa%d.txt",n);
fout = fopen(nameout,"wb");
k = fread (buff,1,j,fp);
// if (k != j) {printf("read err\n"); return (0);}
fwrite(buff,1,k,fout);
fclose(fout);
printf("output in %s\n",nameout);
}
fclose (fp);
return 0;
}追问

我也写好了,虽然没有用你的,但是你的一些思路,还有参照也给了我一些启发。
因为我看的那本书,里面还没有说到你的一些参数。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-10
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

FILE *in,*out;
char filename[50],ch,cfilename[50];

void space()
{
   char ext[6][6]=
   {
  "a.txt","b.txt","c.txt","d.txt","e.txt","f.txt"
   };
   unsigned long int n=1,k,byte=0;
   unsigned int j=0,i=0;
   printf("Please input filename:\n");
   scanf("%s",filename);
   strcpy(cfilename,filename);
   if((in=fopen(filename,"r"))==NULL)
   {
  printf("Cannot open file\n");
  exit(0);
   }
   printf("please input file size after space(kb);\n");
  scanf("%d",&n);
   n=n*1024;
   while(filename[j]!='.')
  j++;
   filename[j]='\0';
   if((out=fopen(strcat(filename,ext[i]),"w"))==NULL)
   {
     printf("Cannot open file\n");
exit(0);
   }
   fseek(in,0,2);
   k=ftell(in);  //k存放当前位置,也就是整个文件的大小
   fseek(in,0,0);
   while(k>0)
   {
  ch=fgetc(in);
  fputc(ch,out);
  byte++;
  k--;
  if(byte==n)    //当为要求的大小时执行括号内的语句
  {
         fclose(out);
byte=0;
strcpy(filename,cfilename);
while(filename[j]!='.')
j++;
filename[j]='\0';
i++;
if((out=fopen(strcat(filename,ext[i]),"w"))==NULL) 
{
                                    //生成分割后的文件所在路径
            printf("Cannot open file\n");
exit(0);
}
  }

   }
   fclose(in);
   printf("File succeed space!\n");

}
void main()
{

printf("now file space!\n");
space();
}

第2个回答  2013-10-09
设置buffer 1k,循环读取200次,写入一个文件,当读到NULL就循环结束咯,直接关闭输出文件,有啥难的?追问

看好我的要求不是一个文件。

追答

分的不就是几个文件么?

用C语言 将一个文件分成固定大小的几个文件。
输入文件名叫 abc.txt 你可以改名。输出文件名叫 aaX.txt X=0,1,2,3...单个文件大小 one_size, 你可以 更改大小。include<stdio.h> main(){ FILE *fp, *fout;char nameout[80];int i,j,k,n;long size, one_size=1024;char *buff;\/\/ one_size=one_size * 0.1; \/\/你...

用C语言 将一个文件分成固定大小的几个文件。
输入文件名叫 abc.txt 你可以改名。输出文件名叫 aaX.txt X=0,1,2,3...单个文件大小 one_size, 你可以 更改大小。include<stdio.h> main(){ FILE *fp, *fout;char nameout[80];int i,j,k,n;long size, one_size=1024;char *buff;\/\/ one_size=one_size * 0.1; \/\/你...

C语言分割文件、合并文件
在进行文件分割操作时,首先需要将整个文件读入内存中。接着,根据预设的分割大小,从内存中提取出一段数据,然后写入到新的文件中。这个过程需要不断重复,直至内存中数据用尽,完成所有数据的分割。这样,原始文件被分解成了多个较小的文件,每个文件大小满足分割要求。文件合并的过程相对简单。首先,读取所...

怎么用c语言生成一个特定大小的文本文件
fseek(fp, nFileLength-1, SEEK_SET); \/\/ 将文件的指针 移至 指定大小的位置 fputc(32, fp); \/\/ 在要指定大小文件的末尾随便放一个数据 fclose(fp);} } void main(){ CreateMyFile("test.txt",1024*256); \/\/调用测试 } ...

用C语言,读取文件的大小,同时计算可以把文件分成多少块32K大小的块,而...
"test.txt","rb"); if(fp==NULL)return 1; while(fgetc(fp)!=EOF)n++; printf("文件大小为%d字节\\n",n); printf("可以分成%d块32K\\n",n\/(1024*32)); printf("余下的那部分的大小为%d字节\\n",n%(1024*32)); fclose(fp); return 0; } ...

如何把一个复杂的C语言源代码分成几个文件,然后在dev c++上进行多文件...
我们的任务是把xx写成一个头文件,将ff写成一个头文件。头文件基本格式:ifndef _xx_h_define _xx_h_\/\/do something endif 第一步:首先将每个头文件写好,如下:注意在源文件使用头文件时要用“”而不能用<>,即:include "ff.h" 而不是 #include <ff.h> 第二步,将源代码写好后的运行...

用C语言完成数据文件(文本文件和二进制文件)拆分和组装程序;如果文件...
FILE * fi = 0; long r = 0;do { memset(buf, 0, szBUF);sprintf(sName, "%s.%d", fileName, i++);fi = fopen(sName, "rb");if (!fi) break;r = fread(buf, sizeof(char), szBUF, fi);if (r < 1) break;fwrite(buf, sizeof(char), r, fo);fclose(fi);}while(...

如何把一个复杂的C语言源代码分成几个文件,然后在dev c++上进行多文件...
Baidu makes me sick!!!\\x0d\\x0a\\x0d\\x0a将所有子程序的声明放在头文件.h里,对应的定义放在同名的.c文件里,主程序的文件和这两个文件都放在同一目录下,举例说明\\x0d\\x0avoid function1(void); \/\/声明\\x0d\\x0avoid function1(void);\/\/声明\\x0d\\x0amain()\\x0d\\x0a{ ...\\x0d\\x0a fu...

怎样用C语言实现文件切割器功能
使用读文件阿 读写要分割的文件 然后得到大小 把想要的大小写到第一个文件里,然后接着写第二个文件 ……

用C语言,读取文件的大小,同时计算可以把文件分成多少块32K大小的块,而...
直接用sizeof来获得文件的大小在用sizeof(buff)\/32000运算符求出能分多少块,再用sizeof(buff)%32000求出剩余的大小

相似回答