`
iwebcode
  • 浏览: 2009681 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

文件分割,合并

 
阅读更多

花了两个小时,写了一份文件分割合并的demo代码

只供学习研究用

用到了stl的 fstream, iostream, string

fstream对文件进行操作,iostream控制输入输出流,string对字符串进行操作

这里我只在开始的检查了文件是否打开的问题,在后面的代码中都没有检查,只是demo的原因,应该在每次打开文件的时候,都必须检查文件是否打开

以下为代码:

/********************************************************************
created:2005/08/18 14:02
created:18:8:2005 16:22
filename: e:/work/Me/TempTest/cstringTest/cstringTest/cstringTest.cpp
file path:e:/work/Me/TempTest/cstringTest/cstringTest
file base:cstringTest
file ext:cpp
author:赵开勇

purpose:分割文件,合并文件,现在是固定大小
如果大小有变化,size有变化,可以采用多次的访问的方式来处理文件
既是每一次只操作一小部分
*********************************************************************/


#include <string>
#include <iostream>
#include <fstream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
fstream pf,pf1;
string filename("E://D100.mpg"); // 这里限定了文件名,也是只是demo而已
string tempstr = "";
char number[10];

pf.open(filename.c_str(),ios::in|ios::binary);

if (!pf)
{
cout<< "err"<<endl;
}

int temp = pf.tellg();
pf.seekg(0, ios_base::end);
long flen = pf.tellg();
pf.seekg(temp);

cout << "file size is: " << flen <<" byte"<< endl;

static const long size = 1024000; // 这里限定了文件的分割大小,只是demo而已;

int n = flen / size + 1; // 文件要分为多少分,为了保证最有一个文件最小,故+1;
cout << "number of file is: "<< n <<endl;


//////////////////////////////////////////////////////////////////////////
// 先分n-1的文件
char *databuf = new char[size];

for(int i = 0; i < n-1 ; i++)
{
itoa(i, number, 10);
tempstr = filename + number;
pf1.open(tempstr.c_str(),ios::out|ios::binary);

pf.read(databuf, size*sizeof(char));
pf1.write(databuf, size*sizeof(char));
pf1.close();
cout << "file :" << tempstr <<endl;
}

delete [] databuf;

//////////////////////////////////////////////////////////////////////////
// 分最后一个文件,由于最后一个文件大小不定,所以单独列出来
long endlen = flen - size * (n-1);

itoa(n-1, number, 10);
tempstr = filename + number;
pf1.open(tempstr.c_str(),ios::out|ios::binary);

databuf = new char[endlen];

pf.read(databuf, endlen*sizeof(char));
pf1.write(databuf, endlen*sizeof(char));
pf1.close();
cout << "file :" << tempstr << endl;

pf.close();
delete[] databuf;

//////////////////////////////////////////////////////////////////////////
// 合并文件类似
tempstr = filename + "A"; //这里为了在同一个目录里面看效果,避免文件同名

pf1.open(tempstr.c_str(), ios::out|ios::binary|ios::app);

databuf = new char[size];

for(int i = 0; i < n-1; i++)
{
itoa(i, number, 10);
tempstr = filename + number;
pf.open(tempstr.c_str(), ios::in|ios::binary);

pf.read(databuf, size*sizeof(char));
pf1.write(databuf, size*sizeof(char));

pf.close();

cout << "file :" << tempstr <<endl;
}

delete [] databuf;

//////////////////////////////////////////////////////////////////////////
// 合并最后一个文件,由于文件大小不清楚,其实没有个文件都可以采用这样的方式
// 合并,都可以避免文件的大小不一的问题,这里假设了出了最后一个文件,其他文
// 件都是相同大小的

itoa(n-1, number, 10);
tempstr = filename + number;
pf.open(tempstr.c_str(), ios::in|ios::binary);

temp = pf.tellg();
pf.seekg(0, ios_base::end);
flen = pf.tellg();
pf.seekg(temp);

databuf = new char[flen];

pf.read(databuf, flen*sizeof(char));
pf1.write(databuf, flen*sizeof(char));

pf.close();
pf1.close();
delete [] databuf;
cout << "file :" << tempstr << endl;


tempstr = filename + "A";
cout << "file :" << tempstr << endl;
//////////////////////////////////////////////////////////////////////////
system("pause");

return 0;
}

分享到:
评论

相关推荐

    文件分割合并

    文件分割合并 V1.5为免费软件,主要是对文件进行分割和合并,并支持对大型文件的操作,界面清晰操作简单,并实时对相关信息进行显示,文件的分割和合并可多线程同时进行.主要功能如下: 1. 支持对任何格式的文件进行...

    文件分割合并工具

    文件分割合并工具 文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具文件...

    文件分割合并器(可拖动版).rar

    文件分割合并器(可拖动版).rar 文件分割合并器(可拖动版).rar

    文件分割合并器———文件分割合并好工具

    文件分割合并工具文件分割合并工具文件分割合并工具文件分割合并工具

    文件分割合并器

    在学习C#过程中学习到FileStream,然后用简单的拖控件完成了一个文件的分割和合并的功能,可以根据分割文件的个数和单个文件的大小两种方式来分割文件。

    飞扬文件分割合并器1.6官方绿色免费版

    飞扬文件分割合并器是一款绿色免费的文件分割和合并工具,r软件可以将大文件分割成若干份小文件,以便移动,存储,也可以将多个小文件合成一个大文件。使用非常方便,有需要的用户可以来本站下载使用。 文件分割合并...

    FileSplitter文件分割合并

    FileSplitter文件分割合并 FileSplitter文件分割合并 FileSplitter文件分割合并 FileSplitter文件分割合并 FileSplitter文件分割合并

    创易文件分割合并器1.6官方绿色免费版

    创易文件分割合并器是一款绿色小巧的文件分割合并工具。软件可以将一个大文件分割成若干份小文件,以便移动,存储,也可以将多个小文件合成一个大文件。使用非常方便,需要的不要错过。 软件说明 基于内存映射实现,...

    delphi文件分割合并

    delphi2009写的,简单的文件处理。

    C语言开发文件分割合并管理器

    纯C语言开发文件分割合并管理器

    吉辰文件分割合并工具V1.6安装免费版

    吉辰文件分割合并是一款小巧的免费文件分割工具。该软件支持对大型文件的操作,同时实时对相关信息进行显示,文件的分割和合并可多线程同时进行,让你轻松完成文件分割和合并。 功能特点  1.支持对任何格式的文件...

    文件分割合并精灵(注意看软件使用说明)

    用于将大文件分割为众多小文件,然后再合并成一个文件。注意:必须确保要合并的文件主文件名相同,而扩展名无需改变。

    史上最好用的文件分割合并软件

    可以合并分割容量的大文件,自动生成bat文件。相当好用!

    文件分割合并助手 和 编程接口

    非常方便的中文界面文件分割合并工具: 特色: 中文界面; 将一个文件分割为任意指定大小的若干文件片段; 将分割后的文件片段轻松合并为原始的文件。 提供了编程接口,你可以将这个功能轻松加入到你自己编写的...

    文件分割合并器FileSplit

    文件分割合并器FileSplit,非常好用的文件分割软件.

    C#文件分割合并工具源代码

    C#源代码 文件分割合并工具 //读取文件流 FileStream fs = new FileStream(txtQoriginal.Text, FileMode.Open); //得到文件数量和分割大小 if (AsNum) { FileSize = (int)(fs.Length / FileNum); if (fs....

Global site tag (gtag.js) - Google Analytics