文件分割合并功能
public partial class Form1 : Form { public Form1() { InitializeComponent(); } //选择文件 事件 private void Btn_SelFile_Click(object sender, EventArgs e) { string filter="选择文件(*.*)|*.*"; OpenFileSelection ofs = new OpenFileSelection(filter,false); if(ofs.IsFileSelected()==true) { this.textBox1.Text =ofs.GetFileName; } } //选择目录 事件 private void btn_seldir_Click(object sender, EventArgs e) { DirectorySelection dirsel = new DirectorySelection(Environment.SpecialFolder.Desktop, "", true); if (dirsel.IsDirectorySelected() == true) { this.textBox2.Text = dirsel.GetSelectedPath; } } //开始分割 private void Btn_Split_Click(object sender, EventArgs e) { try { string fpath = this.textBox1.Text; string splitDir = this.textBox2.Text; SplitFile(fpath, splitDir, 10); MessageBox.Show("分割完毕!", "提示"); } catch (Exception ee) { MessageBox.Show(ee.Message, "提示"); } } public bool SplitFile(string sourefilepath, string splitedStoreDir, int fileNums) { bool rbc = false; FileStream fs = new FileStream(sourefilepath, FileMode.Open); long fileLength = fs.Length; long fNum = (long)fileNums; long filesize = fileLength/fNum; for (int i = 0; i < fNum; i++) { int tmpfsize = (int)filesize; string tmpfName = (i + 1).ToString(); string tmpfpath=splitedStoreDir + "\\" + tmpfName; FileStream wfs = new FileStream(tmpfpath,FileMode.OpenOrCreate); byte[] array = null; if (i == fNum - 1) { long len_pos=fs.Length-fs.Position; array = new byte[len_pos]; fs.Read(array, 0, (int)len_pos); wfs.Write(array, 0, (int)len_pos); } else { array = new byte[tmpfsize]; fs.Read(array, 0, tmpfsize); wfs.Write(array, 0, tmpfsize); } wfs.Flush(); wfs.Close(); wfs.Dispose(); wfs = null; } fs.Close(); fs.Dispose(); fs = null; return rbc; } public bool UnionFile(string splitedStoreDir, string unionfilepath) { bool rbc = false; string[] filepathArray = CommonClass.GetFiles(splitedStoreDir, false); List<int> list = new List<int>(); foreach (string t in filepathArray) list.Add(CommonClass.TInt(t.Replace("\\",""))); list.Sort(); FileStream wfs = new FileStream(unionfilepath, FileMode.Append); for (int i = 0; i < list.Count; i++) { string fp = splitedStoreDir+"\\"+list[i].ToString(); FileStream fs = new FileStream(fp, FileMode.Open); byte[] dataArray=new byte[fs.Length]; fs.Read(dataArray,0,(int)fs.Length); wfs.Write(dataArray,0, (int)fs.Length); // fs.Close(); fs.Dispose(); fs = null; } wfs.Flush(); wfs.Close(); wfs.Dispose(); wfs = null; return rbc; } //开始合并 private void btn_union_Click(object sender, EventArgs e) { try { string splitDir = this.textBox2.Text; UnionFile(splitDir, splitDir + "\\union.iso"); MessageBox.Show("合并完毕!", "提示"); } catch (Exception ee) { MessageBox.Show(ee.Message, "提示"); } } }