zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

实现按行读取文件,把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。

内存文件打包数据 实现 模型 通过 内容
2023-09-14 08:57:16 时间
div >/********************************************************************** * 版权所有 (C)2015, Wu Yingqiang。 * 文件名称:ReadFile.c * 文件标识:无 * 内容摘要:利用二级指针,按行读取文件 * 其它说明:无 * 当前版本: V1.0 * 作 者: Wu Yingqiang * 完成日期: 20150112 **********************************************************************/ #define _CRT_SECURE_NO_WARNINGS #include "stdlib.h" #include "stdio.h" #include "string.h" #define LineMaxLen 1024*2 //每行最大的字符个数 /********************************************************************** * 功能描述:将文件的内容读取到内存中 * 输入参数:pfilename-文件名称,全路径;lineNum--文件的行数 * 输出参数:lineNum--文件的行数 * 返 回 值:文件内容在内存中的首地址 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150112 V1.0 Wu Yingqiang 创建 ***********************************************************************/ char **ReadFile(const char *pfilename/*in*/, int *lineNum/*in out*/) int rv = 0, tmplineNum = 0; FILE *fp = NULL; char lineBuf[LineMaxLen]; char *pTmp = NULL; char **tmpFile = NULL; if (pfilename == NULL || lineNum == NULL) rv = -1; printf("ReadFile() err. param err \n"); goto End; fp = fopen(pfilename, "r"); if (fp == NULL) rv = -2; printf("fopen() err. \n"); goto End; //第一遍读出多少行 while (!feof(fp)) //读每一行 memset(lineBuf, 0, sizeof(lineBuf)); pTmp = fgets(lineBuf, LineMaxLen, fp); if (pTmp == NULL) continue; else tmplineNum++; tmpFile = (char **)malloc((tmplineNum + 1)*sizeof(char *)); if (tmpFile == NULL) goto End; //第二遍读内容 //准备环境 tmplineNum = 0; fseek(fp, 0L, SEEK_SET); while (!feof(fp)) //读每一行 memset(lineBuf, 0, sizeof(lineBuf)); pTmp = fgets(lineBuf, LineMaxLen, fp); if (pTmp == NULL) continue; else int tmplen = strlen(lineBuf); tmpFile[tmplineNum] = (char *)malloc((tmplen + 1)*sizeof(char)); if (tmpFile[tmplineNum] == NULL) goto End; strcpy(tmpFile[tmplineNum], lineBuf); //printf("%s", lineBuf); tmplineNum++; if (fp != NULL) fclose(fp); *lineNum = tmplineNum; return tmpFile; /********************************************************************** * 功能描述:释放文件内容在内存中的内存 * 输入参数:p--文件内容在内存中的首地址,lineNUm--文件的行数 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150112 V1.0 Wu Yingqiang 创建 ***********************************************************************/ void ReadFileFree(char **p, int lineNUm) int i = 0; if (p == NULL) return; for (i = 0; i lineNUm; i++) free(p[i]); free(p); /********************************************************************** * 功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150112 V1.0 Wu Yingqiang 创建 ***********************************************************************/ void main() char **p = NULL; const char *pfilename = "e:/1.txt";//E:\\1.txt int lineNum = 0, i = 0; p = ReadFile(pfilename/*in*/, lineNum/*in out*/); if (p == NULL) return; for (i = 0; i lineNum; i++) printf("%s", p[i]); ReadFileFree(p, lineNum); system("pause"); }




编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。 编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
【通用文件操作】查找重复文件 在前一篇我们以及说了如何搜索文件,详细查看【通用文件操作】文件搜索。今天我们来看看如何查找重复文件。在我们微信、QQ中,经常会我们每发送一次文件就会给我们在本地保存一份。我们可以使用今天的内容来实现重复文件的删除。