文件分割与合并(C# Winforms)
来源:互联网 发布:美国枪击案与网络恶搞 编辑:程序博客网 时间:2024/05/01 13:08
主要代码:
using System;using System.IO;namespace FileManager{ /// <summary> /// 标题:文件辅助类 /// 作者:肖小勇 /// 日期:2011-08-19 /// 描述:目前包含的功能有 “文件分割”、“文件合并” /// </summary> public class FileHelper { /// <summary> /// 单次读取文件的字节数,同时也是分割文件最小容量,默认为 0.5M /// </summary> const int MIN_PARTSIZE = 1024 * 1024/2; #region " Split " /// <summary> /// 分割文件 /// </summary> /// <param name="sourceFile">需要分割的文件路径</param> /// <param name="targetFolder">文件分割后保存的目录</param> /// <param name="singlePartSize">单个文件包的大小,单位字节</param> public static void Split(string sourceFile, string targetFolder, int singlePartSize) { if (!File.Exists(sourceFile)) throw new ArgumentException("指定的源文件路径不存在"); if (!Directory.Exists(targetFolder)) Directory.CreateDirectory(targetFolder); if (singlePartSize < MIN_PARTSIZE) throw new ArgumentOutOfRangeException("singlePartSize", string.Format("不能小于 {0}", MIN_PARTSIZE)); var partSize = 0; var partIndex = 0; var partPath = Path.Combine(targetFolder, GetPartFileName(partIndex)); var partWriter = new BinaryWriter(File.Open(partPath, FileMode.Create)); try { using (var br = new BinaryReader(File.Open(sourceFile, FileMode.Open))) { while (br.BaseStream.Position < br.BaseStream.Length) { if (partSize >= singlePartSize) { partWriter.Flush(); partWriter.Close(); partSize = 0; partIndex++; partPath = Path.Combine(targetFolder, string.Format("{0}.part", partIndex)); partWriter = new BinaryWriter(File.Open(partPath, FileMode.Create)); } var blance = br.BaseStream.Length - br.BaseStream.Position; if (blance > MIN_PARTSIZE) { partWriter.Write(br.ReadBytes(MIN_PARTSIZE)); partSize += MIN_PARTSIZE; } else { var b = Convert.ToInt32(blance); partWriter.Write(br.ReadBytes(b)); partSize += b; } } } } finally { partWriter.Flush(); partWriter.Close(); } } #endregion #region " Merge " /// <summary> /// 合并文件,需要合并的文件必须保存的一个文件夹下,文件名必须是连续的,第一个文件必须是 0.part /// </summary> /// <param name="sourceFolder">分割文件存入的文件夹</param> /// <param name="targetFile">全并后文件存入的路径</param> public static void Merge(string sourceFolder, string targetFile) { if (!Directory.Exists(sourceFolder)) throw new ArgumentException("指定的目录不存在"); var partSize = 0; var partIndex = 0; var partPath = Path.Combine(sourceFolder, GetPartFileName(partIndex)); if (!File.Exists(partPath)) return; var partWriter = new BinaryWriter(File.Open(targetFile, FileMode.Create)); try { while (File.Exists(partPath)) { using (var br = new BinaryReader(File.Open(partPath, FileMode.Open))) { while (br.BaseStream.Position < br.BaseStream.Length) { var blance = br.BaseStream.Length - br.BaseStream.Position; if (blance > MIN_PARTSIZE) { partWriter.Write(br.ReadBytes(MIN_PARTSIZE)); partSize += MIN_PARTSIZE; } else { var b = Convert.ToInt32(blance); partWriter.Write(br.ReadBytes(b)); partSize += b; } } } partSize = 0; partIndex ++; partPath = Path.Combine(sourceFolder, GetPartFileName(partIndex)); } } finally { partWriter.Flush(); partWriter.Close(); } } #endregion static string GetPartFileName(int partIndex) { return string.Format("{0}.part", partIndex); } }}
这里要注意减少读写次数能有效的提高运行效率,上面的代码通过变量 MIN_PARTSIZE 进行控制单次读定的字节数,默认值为 0.5 M。
源代码下载地址:http://download.csdn.net/source/3531898
- 文件分割与合并(C# Winforms)
- c#文件分割与合并 part 2
- C#文件的分割与合并
- 文件分割与合并
- 文件分割与合并(Java)
- c#文件分割与合并 part 1 (转自互联网)
- 分割文件与合并文件
- 文件分割与合并程序
- 文件的合并与分割
- 文件分割与合并例子
- Linux文件分割与合并
- 文件的合并与分割
- 文件分割与合并工具
- 文件的分割与合并
- 文件的分割与合并
- 文件的分割与合并
- 文件的分割与合并
- Linux文件分割与合并
- P2P技术
- VC创建启动即隐藏的对话框(转)
- 只有电话线如何上网
- 有关“.mht”格式
- OPhone网络应用编程实例: 豆瓣电台客户端
- 文件分割与合并(C# Winforms)
- unknown character 0xa1 错误
- 在Redhat/Centos上安装和配置TortoiseHg和kdiff3
- 计算机远程控制
- c++中explicit关键字的含义和用法
- 虚拟继承的意义
- 小数处理的方法
- struts2 checkbox 报错:ognl.OgnlException
- C++中的vector使用范例