文件分割合并功能

文件分割合并功能
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, "提示");
            }
        }

        
    }

你可能感兴趣的:(文件分割合并功能)