您的位置:首页 > 其它

大文件切割

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") ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: