大文件切割
2016-01-06 23:26
246 查看
有时候遇到文件特别大的时候,一次读取特别费内存,可以考虑将大文件分割成若干个小文件进行读取。
/************************************************************************/ /* 大文件分割成多个文件 */ /************************************************************************/ #include <iostream> using namespace std; /************************************************************************/ /* 确定文件的总行数 */ /************************************************************************/ int getLine(char *path) { int i = 0 ; FILE *fp = fopen(path , "r") ; if (fp == NULL) { return -1 ; } else { while (!feof(fp)) { char str[1024] = {0} ; fgets(str , 1024 , fp) ; i++ ; } } fclose(fp) ; return i ; } /************************************************************************/ /* 将文件切割成num份 */ /************************************************************************/ void split(char *path , int num) { char **pfile = new char*[num] ;//定义二重指针,指向保存每个文件的首地址 for (int i = 0 ; i < num ; i++) { pfile[i] = new char[256] ; //保存每个文件的名称 sprintf(pfile[i] , "文件%d.txt" , i + 1) ; } int N = 0 ;//保存要切割文件的总行数 N = getLine(path) ; FILE *fp = fopen(path , "r") ; if (fp == NULL) { return ; } else { if (N %num == 0) //每个文件的行数相等 { for (int i= 0 ; i < num ; i++) { FILE *fw = fopen(pfile[i] , "w") ;//写入 for (int j = 0 ; j < N/num ; j++) { char str[1024] = {0} ; fgets(str , 1024 , fp) ;//读取原文件每一行内容 fputs(str , fw) ;//写入 } cout<<"文件"<<i + 1<<".txt完成!\n" ; fclose(fw) ; } } //这里刚好可以整除,就不考虑不整除的情况 } fclose(fp) ; } void main() { split("wenben.txt" , 3) ; cout<<"切割完成!\n" ; system("pause") ; }
相关文章推荐
- LeetCode Missing Number
- AES加密算法入门
- OpenGL 系列学习之一
- Perl 6 简单的并行
- 解决ssh远程连接错误问题
- LeetCode Search a 2D Matrix II
- SharpMap源码学习<一>
- servlet 访问流程
- java语言的基本组成
- DT大数据梦工厂- 第6课 精通Spark集群搭建与测试
- Linux下的socket编程实践(二)socket编程基本API简介
- Java通过URL提取网站源码
- 根据iPhone6设计稿动态计算rem值
- How to Install Apache, MySQL, PHP, and phpMyAdmin on FreeBSD
- bzoj1095 捉迷藏
- 路径规划path planning-人工势场法
- Makefile---make内嵌函数及make命令显示 (九)
- 猜鸡蛋数量
- Python循环
- MFC的OnPaint工作原理