c++实现合并文件以及拆分实例代码

本文主要研究的是c++实现合并文件以及拆分的相关内容,分享了实现代码,具体如下。

昨天看到一篇介绍TFS的文章,大意是为了处理海量图片,采用分布式架构,将小图片合并为大的文件

兴趣驱使下,写了一个简单的文件合并拆分程序

合并的方法很简单,将小文件写入到大文件中,使用二进制的方式。在大文件头,用一个int记录合并进来的小文件的数量,接下来,一块一块的写入小文件。

每一块都分为三个部分,第一部分是文件的名称,用20个char 来记录;第二部分用一个int来记录小文件的长度;第三部分则是小文件的实际内容

这样,在拆分时,通过文件头部获得小文件的数量,然后逐个获取名称,文件长度以及内容

附上源代码

合并:

void Merge()
{
  char name[20];
  string str1 = "F:/数据/1.jpg";
  string str2 = "F:/数据/2.jpg";
  string strBlock = "F:/数据/BLOCK.dat"; 

  FILE* f1 = fopen(str1.c_str(),"rb+");
  FILE* f2 = fopen(str2.c_str(),"rb+");
  FILE* f3 = fopen(strBlock.c_str(),"rb+"); 

  // 获取文件的长度
  int iLen1 =filelength(fileno(f1));
  int iLen2 = filelength(fileno(f2)); 

  char *buf1 = new char[iLen1];
  memset(buf1,0x0,iLen1);
  char *buf2 = new char[iLen2];
  memset(buf2,0x0,iLen2);  

  // 获取文件内容
  fread(buf1,iLen1,1,f1);
  fread(buf2,iLen2,1,f2);
  fclose(f1);
  fclose(f2);  

  // 在文件头记录合并文件的个数
  int iCount = 2;
  fseek(f3,0,SEEK_SET);
  fwrite(&iCount,sizeof(int),1,f3); 

  // 写入第一个文件
  memset(name,0x0,20);
  strcpy(name,str1.c_str());
  fwrite(name,20,1,f3);
  fwrite(&iLen1,sizeof(int),1,f3);
  fwrite(buf1,iLen1,1,f3);  

  // 写入第二个文件
  memset(name,0x0,20);
  strcpy(name,str2.c_str());
  fwrite(name,20,1,f3);
  fwrite(&iLen2,sizeof(int),1,f3);
  fwrite(buf2,iLen2,1,f3);   

  fclose(f3);  

  //删除申请的内存
  delete[] buf1;
  delete[] buf2;
} 

拆分:

void Split()
{
  char name[20];
  string strBlock = "F:/数据/BLOCK.dat";
  FILE* f3 = fopen(strBlock.c_str(),"rb+"); 

  // 获取文件数量
  int iCount = 0;
  fseek(f3,0,SEEK_SET);
  fread(&iCount,sizeof(int),1,f3); 

  for(int i=0;i<iCount;i++)
  {
    memset(name,0x0,20);
    fread(&name,20,1,f3);
    // 输出名称
    cout<<name<<endl;
    int iLen = 0;
    // 读取文件长度
    fread(&iLen,sizeof(int),1,f3);
    char *buff = new char[iLen];
    // 读取文件内容
    fread(buff,iLen,1,f3);
    char fileLen[10];
    sprintf(fileLen, "%d", iLen); 

    // 以文件长度做名称
    string s = fileLen;
    string strName = "F:/数据/";
    strName += s;
    strName += string(".jpg") ; 

    // 新建一个文件
    FILE* file= fopen(strName.c_str(),"wb+");
    fwrite(buff,iLen,1,file);
    fclose(file);
  } 

  fclose(f3);
} 

总结

以上就是本文关于c++实现合并文件以及拆分实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 详解C++编程中对二进制文件的读写操作

    二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件. 对二进制文件的操作也需要先打开文件,用完后要关闭文件.在打开时要用ios::binary指定为以二进制形式传送和存储.二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件.这是和ASCII文件不同的地方. 用成员函数read和write读写二进制文件 对二进制文件的读写主

  • C++中输入输出流及文件流操作总结

    本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1.流的控制 iomanip          在使用格式化I/O时应包含此头文件.     stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类继承关系 ios是抽象基类,由它派生出istream类和ostream类, iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类 类ifstream继承了

  • 深入理解C++中的文件操作

    前言 我们在编写程序的时候,最密不可分的就是对文件进行相应的操作,我们可以从文件中读取数据,可以将数据保存到文件,可以-- 总而言之,言而总之,一言以蔽之,对文件的操作是非常重要的,下面我们就来介绍一下C++中是如何对文件进行操作的.C++ 通过以下几个类支持文件的输入输出: ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstream: 可同时读写操作的文件类 (由iostream引申而来) 打

  • 详解C++文件读写操作

    在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fstream的内容: #include <fstream> ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstream //读写操作,对打开的文件可进行读写操作 1.打开文件 在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件

  • 解读C++编程的相关文件操作

    C++文件的概念 迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓"文件",一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的

  • c++实现合并文件以及拆分实例代码

    本文主要研究的是c++实现合并文件以及拆分的相关内容,分享了实现代码,具体如下. 昨天看到一篇介绍TFS的文章,大意是为了处理海量图片,采用分布式架构,将小图片合并为大的文件 兴趣驱使下,写了一个简单的文件合并拆分程序 合并的方法很简单,将小文件写入到大文件中,使用二进制的方式.在大文件头,用一个int记录合并进来的小文件的数量,接下来,一块一块的写入小文件. 每一块都分为三个部分,第一部分是文件的名称,用20个char 来记录:第二部分用一个int来记录小文件的长度:第三部分则是小文件的实际内

  • php读取qqwry.dat ip地址定位文件的类实例代码

    实例如下: <?php // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- cla

  • JSP中动态合并单元格的实例代码

    废话不多说了,具体代码如下所示: <span style="font-size:14px;"> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <table width="100%" border="0" cellspacing="0" cellpadding="0&q

  • Spring学习笔记2之表单数据验证、文件上传实例代码

    在上篇文章给大家介绍了Spring学习笔记1之IOC详解尽量使用注解以及java代码,接下来本文重点给大家介绍Spring学习笔记2之表单数据验证.文件上传实例代码,具体内容,请参考本文吧! 一.表单数据验证 用户注册时,需要填写账号.密码.邮箱以及手机号,均为必填项,并且需要符合一定的格式.比如账号需要32位以内,邮箱必须符合邮箱格式,手机号必须为11位号码等.可以采用在注册时验证信息,或者专门写一个工具类用来验证:来看下在SpringMVC中如何通过简单的注释实现表单数据验证. 在javax

  • 使用node.js对音视频文件加密的实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: fs.readFile('./downsuccess/'+name+'', {flag: 'r+', encoding: ''}, function (err, data) { console.log('读取中') if(err) { return; } let b = new Buffer(data); let c = b.toString('hex'); let cipherBuffer = _this.cipher(data); fs.

  • PHP下载文件的函数实例代码

    通过函数完成下载文件的PHP功能代码 function download($url, $filename) { // 获得文件大小, 防止超过2G的文件, 用sprintf来读 $filesize = sprintf ( "%u", filesize ( $url ) ); if (! $filesize) { return; } header ( "Content-type:application/octet-stream\n" ); //application/

  • PyQt5打开文件对话框QFileDialog实例代码

    本文研究的主要是PyQt5打开文件对话框QFileDialog的代码示例,具体如下. 单个文件打开 QFileDialog.getOpenFileName() 多个文件打开 QFileDialog.getOpenFileNames() 文件夹选取 QFileDialog.getExistingDirectory() 文件保存 QFileDialog.getSaveFileName() 实例代码: from PyQt5 import QtWidgets from PyQt5.QtWidgets i

  • Java 客户端向服务端上传mp3文件数据的实例代码

    客户端: package cn.itcast.uploadpicture.demo; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostExce

  • php实现大文件断点续传下载实例代码

    php实现大文件断点续传下载实例,看完你就知道超过100M以上的大文件如何断点传输了,这个功能还是比较经典实用的,毕竟大文件上传功能经常用得到. require_once('download.class.php'); date_default_timezone_set('Asia/Shanghai'); error_reporting(E_STRICT); function errorHandler($errno, $errstr, $errfile, $errline) { echo '<p>

  • 使用java文件过滤器输出制定格式文件路径的实例代码

    使用java文件过滤器输出制定格式文件路径的实例代码如下所示: 一.使用输出路径判断过滤 import java.io.File; public class demo_file04 { public static void main(String[] args) { fileall(new File("D:\\coding")); } private static void fileall(File f1) { // System.out.println(f1); //判断文件是否是目

随机推荐