小型文件管理程序设计.doc
* */* 包含头文件 */ #include #include #include #include /* 定义宏 */* 定义数据类型 */* 定义外部变量 */* 声明函数原型 */ int DisplayTxtFile (char *Filename, char *mode); int CopyFile (char *SourceFile, char *TargetFile); int ConnectFile (char *SourceFile, char *TargetFile); int CompareFile (char *SourceFile, char *TargetFile); int DeleteFile (char *Filename); long CountFileLength (char *Filename); int RenameFile (char *SourceFile, char *TargetFile); int Menu_Select (void); int MenuWin_Select (void);/* 函数定义开始 */ /*Function: DisplayTxtFileDescription: 文本文件显示读取指定的文本文件中的内容,逐个字符,输出显示在屏幕上。Calls: fopen(),feof(),fgetc()等函数Called By: main() Input: 文本文件名Output: 无Return: 成功返回 0,失败返回-1Others: 必作模块 1 */ int DisplayTxtFile (char *Filename, char *mode) FILE *fp;fp = fopen(Filename, mode);if (fp = NULL)printf(“nFile Open Error!“);return -1;while (!feof(fp)putchar(fgetc(fp);fclose(fp);return 0; /*Function: CopyFile Description: 文件复制将指定的文本文件中的内容,复制到另一个文本文件中。Calls: fopen(),feof(),fgetc(),fclose()等函数Called By: main()Input: 源文件名,目标文件名Output: 无Return: 成功返回 0,失败返回-1Others: 必作模块 2*/ int CopyFile (char *SourceFile, char *TargetFile) FILE *fp1, *fp2;fp1 = fopen(SourceFile, “r“);if (fp1 = NULL)printf(“nCan not open the Source File:%s !“, SourceFile);return -1; fp2 = fopen(TargetFile, “w“);if (fp2 = NULL)printf(“nCan not open the Target File:%s !“, TargetFile);return -1; while (!feof(fp1)fputc(fgetc(fp1), fp2); fclose(fp1); fclose(fp2);return 0; /*Function: ConnectFileDescription: 文件连接将指定的文本文件中的内容,连接到另一个文本文件中。Calls: fopen(),feof(),fgetc(),fclose()等函数Called By: main()Input: 源文件名,目标文件名Output: 无Return: 成功返回 0,失败返回-1Others: 必作模块 3 */ int ConnectFile (char *SourceFile, char *TargetFile) FILE *fp1, *fp2;fp1 = fopen(SourceFile, “r“);if (fp1 = NULL)printf(“nCan not open the Source File:%s !“, SourceFile);return -1; fp2 = fopen(TargetFile, “a“);if (fp2 = NULL)printf(“nCan not open the Target File:%s !“, TargetFile);return -1; while (!feof(fp1)fputc(fgetc(fp1), fp2); fclose(fp1); fclose(fp2);return 0; /*Function: CompareFile Description: 文本文件比较将指定的文本文件中的内容,与另一个文本文件比较。Calls: fopen(),feof(),fgetc(),fclose()等函数Called By: main()Input: 源文件名,目标文件名Output: 无Return: 相同则返回 0,否则返回-1Others: 必作模块 4 */ int CompareFile (char *SourceFile, char *TargetFile) FILE *fp1, *fp2;char ch1, ch2;int flag;fp1 = fopen(SourceFile, “r“);if (fp1 = NULL)printf(“nCan not open the Source File:%s !“, SourceFile);return -1; fp2 = fopen(TargetFile, “a“);if (fp2 = NULL)printf(“nCan not open the Target File:%s !“, TargetFile); return -1; flag = 0;while (feof(fp1) = 0 ch2 = fgetc(fp2);if ( ch1 != ch2 )flag = -1; break;fclose(fp1); fclose(fp2);return flag; /*Function: DeleteFileDescription: 删除指定的文件先提示用户,用户选择后删除。Calls: unlink()系统函数Called By: main()Input: 文本文件名Output: 无Return: 成功返回 0,失败返回-1Others: 必作模块 5 */ int DeleteFile (char *Filename) char answer2;printf(“n Are you sure(y/n)?“);scanf(“%s“, answer);if (strcmp(answer, “y“) | strcmp(answer, “Y“)if (unlink(Filename) /* 删除指定文件 */printf(“nCant not delete the filename“);return -1;elsereturn 0; /*Function: CountFileLength Description: 统计文本文件字节长度Calls: fopen(),feof(),fgetc(),fclose()等若干函数Called By: main()Input: 文本文件名Output: 无Return: 成功返回 0,失败返回-1Others: 必作模块 6 */ long CountFileLength (char *Filename) FILE *fp;long len = 0;fp = fopen(Filename, “r“);if (fp = NULL)printf(“nFile Open Error!“);return -1;while (!feof(fp)fgetc(fp);len+;fclose(fp);return len; /*Function: RenameFile Description: 文件改名Calls: rename()系统函数Called By: main() Input: 文本文件名Output: 无Return: 成功返回 0,失败返回-1Others: 必作模块 7 */ int RenameFile (char *SourceFile, char *TargetFile) if (rename(SourceFile,TargetFile)printf(“nCan not rename!“);return -1;elsereturn 0; /*Function: Menu_SelectDescription: 普通菜单,供用户选择Calls: gotoxy(),cprintf()等系统函数Called By: main( ) Input: 无Output: 整型数据,用户的选择Return: 整型数据,用户的选择Others: 选作模块 7 */ int Menu_Select (void)char *menu = “*MENU*“, /*定义菜单字符串数组*/“ 0. Display Text File “, /* 文本文件显示 */“ 1. Copy File “, /* 文件复制 */“ 2. Connect File “, /*文件连接 */“ 3. Compare File “, /*文件内容比较 */“ 4. Delete File “, /*文件删除 */“ 5. Counter the Length of File “, /*文本文件字节数统计 */“ 6. Rename File “, /*文件更名 */“ 7. Quit“,“*“ ;char s3; /*以字符形式保存选择号*/int c,i; /*定义整形变量 */clrscr(); for(i = 0; i 7); /*选择项不在 014 之间重输*/return c; /* 主程序根据该返回数调用相应的函数*/ /*Function: MenuBar_SelectDescription: 窗口式菜单,供用户选择Calls: gotoxy(),textcolor(),textbackground,window()等函数Called By: main( ) Input: 无Output: 整型数据,用户的选择Return: 整型数据,用户的选择Others: 示例模块 */ int MenuWin_Select (void) char *menu=“*MENU*“, /*定义菜单字符串数组*/“ 0. Display Text File “, /* 文本文件显示 */“ 1. Copy File “, /* 文件复制 */“ 2. Connect File “, /*文件连接 */“ 3. Compare File “, /*文件内容比较 */“ 4. Delete File “, /*文件删除 */“ 5. Counter the Length of File “, /*文本文件字节数统计 */“ 6. Rename File “, /*文件更名 */“ 7. Quit“,“*“ ;char s3; /* 以字符形式保存选择号 */int c,i; /* 定义整形变量 */gotoxy(1, 25); /* 移动光标 */printf(“press any key enter menu.n“); /* 压任一键进入主菜单 */getch(); /* 输入任一键 */clrscr(); /* 清屏幕 */gotoxy(1, 1); /* 移动光标 */textcolor(YELLOW); /* 设置文本显示颜色为黄色*/textbackground(BLUE); /* 设置背景颜色为蓝色 */gotoxy(10, 2); /* 移动光标*/putch(0xc9); /* 输出左上角边框 */for(i = 1; i 7); /*选择项不在 014 之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/ /* *主函数开始* */ /* *Function: MenuBar_SelectDescription: 窗口式菜单,供用户选择Calls: gotoxy(),textcolor(),textbackground,window()等函数Called By: main( ) Input: 无Output: 整型数据,用户的选择Return: 整型数据,用户的选择Others: 示例模块 * */ void main() long length;char File255;char SourceFile255;char TargetFile255;char mode5;long Filelen;clrscr(); /*清屏*/for( ; ; ) /*无限循环*/switch(MenuWin_Select() /*调用主菜单函数,返回值整数作开关语句的条件*/ /*值不同,执行的函数不同,break 不能省略*/case 0:printf(“nPlease intput FileName:“);scanf(“%s“, File);strcpy(mode, “r“);DisplayTxtFile(File, mode);break;case 1:printf(“nPlease intput source FileName:“);scanf(“%s“, SourceFile);printf(“nPlease intput Target FileName:“);scanf(“%s“, TargetFile);CopyFile(SourceFile, TargetFile);break;case 2:printf(“nPlease intput source FileName:“);scanf(“%s“, SourceFile);printf(“nPlease intput Target FileName:“);scanf(“%s“, TargetFile);ConnectFile(SourceFile, TargetFile);break;case 3:printf(“nPlease intput source FileName:“);scanf(“%s“, SourceFile);printf(“nPlease intput Target FileName:“);scanf(“%s“, TargetFile);CompareFile(SourceFile, TargetFile);break;case 4:printf(“nPlease intput FileName:“);scanf(“%s“, File);DeleteFile(File);break;case 5:printf(“nPlease intput FileName:“);scanf(“%s“, File);Filelen = CountFileLength(File);if (Filelen != -1) printf(“The length of file is %ld “, Filelen);elseprintf(“The file read error!“);getch();break;case 6:printf(“nPlease intput source FileName:“);scanf(“%s“, SourceFile);printf(“nPlease intput Target FileName:“);scanf(“%s“, TargetFile);RenameFile(SourceFile, TargetFile); break;case 7:exit(); /* end of switch */ /* end of while */ /* End of main */