实例介绍
【实例简介】分割大文件为小文件,同时实现将 已分割的小文件合并
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace FileComminuteUnite { public partial class frmSplit : Form { public frmSplit() { InitializeComponent(); } #region 分割文件 /// <summary> /// 分割文件 /// </summary> /// <param name="strFlag">分割单位</param> /// <param name="intFlag">分割大小</param> /// <param name="strPath">分割后的文件存放路径</param> /// <param name="strFile">要分割的文件</param> /// <param name="PBar">进度条显示</param> public void SplitFile(string strFlag, int intFlag, string strPath, string strFile, ProgressBar PBar) { int iFileSize = 0; //根据选择来设定分割的小文件的大小 switch (strFlag) { case "Byte": iFileSize = intFlag; break; case "KB": iFileSize = intFlag * 1024; break; case "MB": iFileSize = intFlag * 1024 * 1024; break; case "GB": iFileSize = intFlag * 1024 * 1024 * 1024; break; } //以文件的全路径对应的字符串和文件打开模式来初始化FileStream文件流实例 FileStream SplitFileStream = new FileStream(strFile, FileMode.Open); //以FileStream文件流来初始化BinaryReader文件阅读器 BinaryReader SplitFileReader = new BinaryReader(SplitFileStream); //每次分割读取的最大数据 byte[] TempBytes; //小文件总数 int iFileCount = (int)(SplitFileStream.Length / iFileSize); PBar.Maximum = iFileCount; if (SplitFileStream.Length % iFileSize != 0) iFileCount ; string[] TempExtra = strFile.Split('.'); //循环将大文件分割成多个小文件 for (int i = 1; i <= iFileCount; i ) { //确定小文件的文件名称 string sTempFileName = strPath @"\" i.ToString().PadLeft(4, '0') "." TempExtra[TempExtra.Length - 1]; //小文件名 //根据文件名称和文件打开模式来初始化FileStream文件流实例 FileStream TempStream = new FileStream(sTempFileName, FileMode.OpenOrCreate); //以FileStream实例来创建、初始化BinaryWriter书写器实例 BinaryWriter TempWriter = new BinaryWriter(TempStream); //从大文件中读取指定大小数据 TempBytes = SplitFileReader.ReadBytes(iFileSize); //把此数据写入小文件 TempWriter.Write(TempBytes); //关闭书写器,形成小文件 TempWriter.Close(); //关闭文件流 TempStream.Close(); PBar.Value = i - 1; } //关闭大文件阅读器 SplitFileReader.Close(); SplitFileStream.Close(); MessageBox.Show("文件分割成功!"); } #endregion #region 合并文件 /// <summary> /// 合并文件 /// </summary> /// <param name="list">要合并的文件集合</param> /// <param name="strPath">合并后的文件名称</param> /// <param name="PBar">进度条显示</param> public void CombinFile(string[] strFile, string strPath, ProgressBar PBar) { PBar.Maximum = strFile.Length; FileStream AddStream = null; //以合并后的文件名称和打开方式来创建、初始化FileStream文件流 AddStream = new FileStream(strPath, FileMode.Append); //以FileStream文件流来初始化BinaryWriter书写器,此用以合并分割的文件 BinaryWriter AddWriter = new BinaryWriter(AddStream); FileStream TempStream = null; BinaryReader TempReader = null; //循环合并小文件,并生成合并文件 for (int i = 0; i < strFile.Length; i ) { //以小文件所对应的文件名称和打开模式来初始化FileStream文件流,起读取分割作用 TempStream = new FileStream(strFile[i].ToString(), FileMode.Open); TempReader = new BinaryReader(TempStream); //读取分割文件中的数据,并生成合并后文件 AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length)); //关闭BinaryReader文件阅读器 TempReader.Close(); //关闭FileStream文件流 TempStream.Close(); PBar.Value = i 1; } //关闭BinaryWriter文件书写器 AddWriter.Close(); //关闭FileStream文件流 AddStream.Close(); MessageBox.Show("文件合并成功!"); } #endregion private void frmSplit_Load(object sender, EventArgs e) { timer1.Start();//启动计时器 } //选择要分割的文件 private void btnSFile_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.OK) { txtFile.Text = openFileDialog.FileName; } } //执行文件分割操作 private void btnSplit_Click(object sender, EventArgs e) { try { if (txtLength.Text == ""||txtFile.Text.Trim()==""||txtPath.Text.Trim()=="") { MessageBox.Show("请将信息填写完整!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); txtLength.Focus(); } else if (cboxUnit.Text == "") { MessageBox.Show("请选择要分割的文件单位!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); cboxUnit.Focus(); } else { SplitFile(cboxUnit.Text, Convert.ToInt32(txtLength.Text.Trim()), txtPath.Text, txtFile.Text, progressBar); } } catch { } } //选择分割后的文件存放路径 private void btnSPath_Click(object sender, EventArgs e) { if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { txtPath.Text = folderBrowserDialog.SelectedPath; } } //选择要合成的文件 private void btnCFile_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.OK) { string Selectfile = ""; string[] files = openFileDialog.FileNames; for (int i = 0; i < files.Length; i ) { Selectfile = "," files[i].ToString(); } if (Selectfile.StartsWith(",")) { Selectfile = Selectfile.Substring(1); } if (Selectfile.EndsWith(",")) { Selectfile.Remove(Selectfile.LastIndexOf(","),1); } txtCFile.Text = Selectfile; } } //选择合成后的文件存放路径 private void btnCPath_Click(object sender, EventArgs e) { if (saveFileDialog.ShowDialog() == DialogResult.OK) { txtCPath.Text = saveFileDialog.FileName; } } //执行合成文件操作 private void btnCombin_Click(object sender, EventArgs e) { try { if (txtCFile.Text.Trim() == "" || txtCPath.Text.Trim() == "") { MessageBox.Show("请将信息输入完整!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (txtCFile.Text.IndexOf(",") == -1) MessageBox.Show("请选择要合成的文件,最少为两个!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); else { string[] strFiles = txtCFile.Text.Split(','); CombinFile(strFiles, txtCPath.Text, progressBar); } } } catch { } } //监视“分割”/“合并”按钮的可用状态 private void timer1_Tick(object sender, EventArgs e) { if (txtFile.Text != "" && txtPath.Text != "") btnSplit.Enabled = true; else btnSplit.Enabled = false; if (txtCFile.Text != "" && txtCPath.Text != "") btnCombin.Enabled = true; else btnCombin.Enabled = false; } } }
标签:
相关软件
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)