您的位置:首页 > 其它

文件分割

2016-08-26 09:32 344 查看
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 FileSplit

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void btnOpen_Click(object sender, EventArgs e)

        {

            if (openFileDialog1.ShowDialog() == DialogResult.OK)

            {

                textBoxFilePath.Text = openFileDialog1.FileName;

               

                String outputPath=textBoxFilePath.Text;

                int indexOfLastPoint = outputPath.LastIndexOf('.');

                outputPath = outputPath.Substring(0, indexOfLastPoint);

                textBoxOutPutPath.Text = outputPath;

            }

        }

        private void btnSplit_Click(object sender, EventArgs e)

        {

            if (String.IsNullOrEmpty(textBoxOutPutPath.Text.Trim()))

            {

                return;

            }

            try

            {

                int size = Convert.ToInt32(textBoxSize.Text);

                String unit = comboBoxSize.Text;

                String FileName = textBoxFilePath.Text;

                String outputPath=textBoxOutPutPath.Text;

                if (Directory.Exists(outputPath))

                {

                }

                else

                {

                    DirectoryInfo directoryInfo = new DirectoryInfo(outputPath);

                    directoryInfo.Create();

                }

                SplitFile(FileName, size, unit, outputPath);

                MessageBox.Show("文件分割成功!");  

            }

            catch (System.Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

        private void SplitFile(string FileName, int size, string unit, string outputPath)

        {           

                int iFileSize = 0; //根据选择来设定分割的小文件的大小

                switch (unit)

                {

                    case "Byte":

                        iFileSize = size;

                        break;

                    case "KB":

                        iFileSize = size * 1024;

                        break;

                    case "MB":

                        iFileSize = size * 1024 * 1024;

                        break;

                    case "GB":

                        iFileSize = size * 1024 * 1024 * 1024;

                        break;

                }

                //以文件的全路径对应的字符串和文件打开模式来初始化FileStream文件流实例

                FileStream SplitFileStream = new FileStream(FileName, FileMode.Open);

                //以FileStream文件流来初始化BinaryReader文件阅读器

                BinaryReader SplitFileReader = new BinaryReader(SplitFileStream);

                //每次分割读取的最大数据

                byte[] TempBytes;

                //小文件总数

                int iFileCount = (int)(SplitFileStream.Length / iFileSize);               

                if (SplitFileStream.Length % iFileSize != 0)

                    iFileCount+=1;

                string inputFileName=FileName.Substring(FileName.LastIndexOf('\\')+1);

                //循环将大文件分割成多个小文件

                for (int i = 1; i <= iFileCount; i++)

                {

                    //确定小文件的文件名称

                    string sTempFileName = outputPath + @"\" + i.ToString() + "_" + inputFileName;

                    //小文件名

                    //根据文件名称和文件打开模式来初始化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();                   

                }

                //关闭大文件阅读器

                SplitFileReader.Close();

                SplitFileStream.Close();                           

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            comboBoxSize.SelectedIndex = 1;

        }

        private void btnOpenOutPutPath_Click(object sender, EventArgs e)

        {

            if (String.IsNullOrEmpty(textBoxOutPutPath.Text.Trim()))

            {

                return;

            }

            System.Diagnostics.Process.Start("Explorer.exe", textBoxOutPutPath.Text);

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: