将两个文本文件合并成一个新的文本文件
这倒有个现成的(十年历史以上):
/* ** ATTACH.C ** ** 将第一个文件(虱子)加放在第二个文件(狗)的尾后。 ** 若然第二个文件不存在,就自行起个新的。 ** wing1978@sohu.com */ #define ATTACH_BUFFER_SIZE 32768 // 64KB 以下
/*--------------------------------- Includes --------------------------------*/ #include // exit() #include #include // toupper()
/*----------------------------- Global Variables ----------------------------*/ FILE *Flea, *Dog; // 将虱子放在狗身上 unsigned int BlockSize; unsigned int ReadSize; int Quiet = 0; // 没人反对便开口说话 char DogMode[3] = {'a', 'b', '\0'}; // 没指示便加长文件 unsigned char p[ATTACH_BUFFER_SIZE];
/*------------------------ Local function prototypes ------------------------*/ static void Exit (int);
/*------------------------------ Main Function ------------------------------*/ int main (int ArgC, char *ArgV[]) { char Option;
if (ArgC < 3) { printf( \n\n用法 : %s 虱子 狗儿 [q/Q]\n, *ArgV[0]); printf( \n我们是要将虱子放在狗儿身上。\n); printf( q/Q 不动声息地\n); printf( o/O 不作声还把狗儿也去掉,只剩下虱子。\n); return 1; } if (ArgC > 3) { Option = (char)toupper( *ArgV[3]); if ('Q' == Option) Quiet = 1; else if ('O' == Option) { Quiet = 1; DogMode[0] = 'w'; } } if (NULL == (Flea = fopen( ArgV[1], rb))) Exit( 2); if (NULL == (Dog = fopen( ArgV[2], DogMode))) Exit( 3);
BlockSize = ATTACH_BUFFER_SIZE;
if (!Quiet) { printf( 缓冲区大少是 %u bytes.\n, BlockSize); printf( ... %s 狗儿跑得还不慢呢 ..., ArgV[2]); }
while (0 < (ReadSize = fread( p, 1, BlockSize, Flea))) { fwrite( p, ReadSize, 1, Dog); }
fclose( Flea); fclose( Dog );
if (!Quiet ) { printf( 叮上了。\n); } Exit( 0); return 0; // make ANSI checker happy } // main ()
/* ** Exit() */ static void Exit (int Rc) { if (!Quiet) { switch (Rc) { case 2: printf( \n虱子太小 (第一份文件开不成)\n); break; case 3: printf( \n狗儿太快 (第二份文件开不成)\n); break; case 4: printf( \n狗儿没毛 (malloc 说没内存了)\n); break; } } exit( Rc); } // Exit() |