实现按行读取文件,把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。
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中,经常会我们每发送一次文件就会给我们在本地保存一份。我们可以使用今天的内容来实现重复文件的删除。
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。 编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
【通用文件操作】查找重复文件 在前一篇我们以及说了如何搜索文件,详细查看【通用文件操作】文件搜索。今天我们来看看如何查找重复文件。在我们微信、QQ中,经常会我们每发送一次文件就会给我们在本地保存一份。我们可以使用今天的内容来实现重复文件的删除。
相关文章
- powershell加载EXE进内存运行
- 内存运行PE文件
- NodeJS V8引擎的内存和垃圾回收器(GC)
- 内存溢出的解决思路
- C#内存映射文件消息队列实战演练(MMF—MQ)
- 外排序(大文件内存不够无法一次加载)
- 数字图像处理 使用C#进行图像处理六 内存映射文件
- golang切片slice详解:介绍、内存分析、定义、遍历、切片可以继续切片、切片可以动态增长、切片的拷贝及底层原理
- JVM内存屏障规范
- jvm最大内存限制多少?
- JVM 调优实战--jmap的使用以及内存溢出分析
- 面试- 阿里-. 大数据题目- 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
- Android 内存优化使用profile 和 MAT 工具进行内存泄漏检测
- android 堆内存和栈内存详解
- 【IPC进程间通讯之三】内存映射文件Mapping File
- Python:缓存库mo-cache支持内存、文件、Redis
- 操作系统中的任务调度 & CPU 内存缓存一致性问题
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )
- 【Android 逆向】Android 逆向基本概念 ( 软件运行时内存结构 | 文件与内存之间的联系 )
- 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )
- 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )
- PostgreSQL的学习心得和知识总结(二十四)|CentOS环境 配置生成coredump程序崩溃内存转储文件及gdb调试core文件
- 使用Windbg定位Windows C++程序中的内存泄露
- 内存耗尽怎么办?
- dump文件解析之探索.Net的内存
- c#实现内存映射文件共享内存
- 用Valgrind检查内存泄漏
- Linux:内存访问问题检查工具valgrind