合并C中的两个文件,任何文件

时间:2014-07-21 15:00:53

标签: c linux file io merge

我正在尝试找到一个可以合并两个文件的程序,任何文件,如.nc文件

我需要复制一个1.5GB长的.nc文件,我不想把它作为文本打开并复制并粘贴其内容以便我可以把它做得更大

我在网上发现了这个代码,但它对我这样的大文件不起作用吗?

适用于我注意到的小文本文件

#include<stdio.h>
main()
{
    char f1[10],f2[10];
    puts("enter the name of file 1");      /*getting the names of file to be concatenated*/
    scanf("%s",f1);
    puts("enter the name of file 2");
    scanf("%s",f2);
    FILE *fa,*fb,*fc;
    fa=fopen(f1,"r");             /*opening the files in read only mode*/
    fb=fopen(f2,"r");
    fc=fopen("merge.txt","w+");   /*opening a new file in write,update mode*/
    char str1[200];
    char ch1,ch2;
    int n=0,w=0;
    while( (( ch1=fgetc(fa) )!=EOF)&&((ch2=fgetc(fb))!=EOF))
    {
        if(ch1!=EOF)             /*getting lines in alternately from two files*/
        { 
            ungetc(ch1,fa);
            fgets(str1,199,fa);
            fputs(str1,fc);
            if(str1[0]!='\n') n++;      /*counting no. of lines*/
        }
        if(ch2!=EOF)
        { 
            ungetc(ch2,fb);
            fgets(str1,199,fb);
            fputs(str1,fc);
            if(str1[0]!='\n')n++;        /*counting no.of lines*/
        }
    }
    rewind(fc);
    while((ch1=fgetc(fc))!=EOF)       /*countig no.of words*/
    {
        ungetc(ch1,fc);
        fscanf(fc,"%s",str1);
        if(str1[0]!=' '||str1[0]!='\n')
            w++;
    }
    fprintf(fc,"\n\n number of lines = %d \n number of words is = %d\n",n,w-1);
    /*appendig comments in the concatenated file*/
    fclose(fa);
    fclose(fb);
    fclose(fc);
}

我正在合并同一个文件,以便复制它,但是当它吐出文件的结果时,它说该文件只有8,668字节?!?当原始文件是1.5GB时,这怎么可能?

感谢您的提前帮助

1 个答案:

答案 0 :(得分:3)

您不需要编写程序来执行此操作,已经存在。

cat foo.nc bar.nc > foobar.nc

bar.nc将连接到foo.nc foobar.nc的末尾。这适用于二进制和文本数据。如果要添加到现有文件:

cat foo.nc >> bar.nc

foo.nc将添加到bar.nc的末尾。

有关详细信息,请参阅man cat