合并txt文件一例

//合并TXT.C #include <stdio.h> #include <string.h> #include <stdlib.h> #include "FileFun.h" const char * OutFileName="合并后的文件.TXT"; FILE *AllFile[MaxFileNum],*CombinedFile,*ListFile; char *FileName; int FileNum , i = 0; int main() { system("title 欢迎使用少杰的程序@JOKERS"); system("color a9"); system("mode con: cols=40 lines=40"); puts("正在生成列表……"); _sleep(1000); MakeFileList(); puts("已生成列表,现在开始识别文件类型……"); _sleep(1000); if((ListFile = fopen("$temp$.lis","r")) == NULL) { fprintf(stderr, "Can not open file."); return 0; } FileName=(char *)malloc(MAX_NAME*sizeof(int)); while(fgets(FileName,INT_MAX,ListFile)&&i<MaxFileNum) { AllFile[i]=ConvertName(FileName); puts(FileName); printf("识别完成%d个/n",++i); free(FileName); FileName=(char *)malloc(MAX_NAME*sizeof(int)); } FileNum=i+1; puts("现在开始合并已找到的文件……"); if((CombinedFile = fopen(OutFileName,"w")) == NULL) { fprintf(stderr, "Can not creat file."); return 0; } while(i>0) { if(AllFile[i]!=NULL) CombineFiles(AllFile[i]); printf("已合并%5d个/n",FileNum-i); i--; } puts("已经完成合并,即将为您打开合并后的文件……"); _sleep(1000); fclose(CombinedFile); fclose(ListFile); system("del $temp$.lis"); system(OutFileName); } //FILEFUN.H /* * 时间:2011年2月1日12:51:34 * 内容:第一次写程序用自己编写的库 * 功能:合并程序所在目录的所有txt文件 * 作者:李少杰 * 版本:1.0 * 完成日期:2011年2月1日19:02:10。用的时间不是很多,希望再接再厉~/(≧▽≦)/~啦啦啦 */ #include<stdio.h> #include<stdlib.h> #define bool int #define MaxFileNum 100000 #define MAX_NAME 255 extern FILE *AllFile[MaxFileNum],*CombinedFile,*ListFile; void MakeFileList(void); bool CheckTXT(char *name); FILE* ConvertName(char *FileName); int CombineFiles(FILE *file); void CreatNewName(char *OldName); //FILEFUN.C #include<stdio.h> #include<stdlib.h> #include<string.h> #include "FileFun.h" /* * MakeFileList:实用DOS的输出重定向功能和dir命令 * 生成当前目录的所有文件名的列表并 * 保存在$temp$.lis文件中。 * */ void MakeFileList() { system("dir /b /a:-h >>$temp$.lis"); } /* * CheckTXT:检查字符串中是否包含“txt” * 也就是检查文件是否为txt格式. * 若是则返回1,不是则返回0. */ int CheckTXT(char *name) { int Len=strlen(name); int i; char* format[2]={"txt/n","TXT/n"}; if(Len>4) //只有文件名长度大于4才进行匹配 { for(i=3;i>=1;i--) { if(name[Len-1-i]==format[0][3-i]||name[Len-1-i]==format[1][3-i]) ; //不进行任何操作,继续比较 else //若不匹配,立即返回0 return 0; } return 1; //全部匹配则返回1 } else return 0; //文件名长度不符合要求,直接返回0 } /* * ConvertName:将得到的文件列表$temp$.lis从文件 * 转换到数组存储,以便于后续操作。 * */ FILE * ConvertName(char * FileName) { FILE *tmp; if(CheckTXT(FileName)) { CreatNewName(FileName); if((tmp=fopen(FileName,"r"))!=NULL) return tmp; else return NULL; } else return NULL; } /* * CombineFiles:合并文件到最终文件的函 * 数,将使用fgetc和fputc * 函数把源文件指针指向的 * 文件中所有字符拷贝到目 * 标文件中。 */ int CombineFiles(FILE * file) { int ch; while((ch=fgetc(file))!=EOF) fputc(ch,CombinedFile); fputs("/n-----------------------------" "我是传说中的分割线" "-----------------------------/n",CombinedFile); return 1; } /* * CreatNewName:由于由重定向输出的文件名在 * 用函数fgets读入的时候会在末 * 尾处多一个换行符,所以必须删 * 去,否则不能正确打开文件。 */ void CreatNewName(char *OldName) { int i=strlen(OldName); while(i-4) if(OldName[i]=='/n') OldName[i--]='/0'; else i--; }

你可能感兴趣的:(File,dos,null,System,存储)