zoukankan      html  css  js  c++  java
  • 将一个文件分割为多个文件

    实现效果:

      

    知识运用:

      FileStream 

      BinaryReader类   //用特定的编码将基元数据类型读作二进制值   其构造函数主要使用UTF8Encoding初始化类实例 

      public BinaryReader(Stream input)

          BinaryReader类的ReadBytes方法   //从当前流中将count个字节读入字节数组  并使当前位提升count个字节

          public virtual byte[] ReadBytes(int count)

      BinaryWriter类    //用特定的编码将基元数据类型写入流   其构造函数主要使用UTF8Encoding初始化类实例

      public BinaryWriter(Stream output)

          BinaryWriter类的Write方法        //将值写入当前流

          public virtual void Write(byte[] buffer)

    实现代码:

            /// <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 = new FileStream(strFile,FileMode.Open);   //以文件全路径 和文件打开模式创建FileStream文件流对象
                BinaryReader binaryReader = new BinaryReader(fileStream);        //以FileStream文件流来创建BinaryReader文件阅读器
                byte[] tempByte;                                                 //每次分割读取的文件的最大数据
                int iFileCount = (int) (fileStream.Length / iFileSize);          //小文件总数
                if (fileStream.Length % iFileSize != 0) iFileCount++;
                PBar.Maximum = iFileCount;
                string[] tempExtra = strFile.Split('.');
                for (int i = 1; i <= iFileCount; i++)
                {
                    string iTempName = strPath + @"" + i.ToString().PadLeft(4, '0') + "." + tempExtra[tempExtra.Length- 1];
                    FileStream tempStream = new FileStream(iTempName,FileMode.OpenOrCreate);
                    BinaryWriter tempWriter = new BinaryWriter(tempStream);
                    tempByte = binaryReader.ReadBytes(iFileSize);                //从大文件中读取指定大小的数据
                    tempWriter.Write(tempByte);                                  //把此数据写入小文件
                    tempWriter.Close();                                          //关闭书写器  形成小文件
                    tempStream.Close();                                          //关闭流对象
                    PBar.Value = i;
                }
                binaryReader.Close();                                            //关闭大文件阅读器
                fileStream.Close();                                              //关闭数据流
                MessageBox.Show("文件分割成功!");
            }
    
    
  • 相关阅读:
    [ jquery 选择器 :hidden ] 此方法选取匹配所有不可见元素,或者type为hidden的元素
    剑指 Offer 03. 数组中重复的数字 哈希
    LeetCode 1736. 替换隐藏数字得到的最晚时间 贪心
    Leetcode 1552. 两球之间的磁力 二分
    Leetcode 88. 合并两个有序数组 双指针
    LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
    LeetCode 1743. 相邻元素对还原数组 哈希
    LeetCode 1745. 回文串分割 IV dp
    剑指 Offer 47. 礼物的最大价值 dp
    剑指 Offer 33. 二叉搜索树的后序遍历序列 树的遍历
  • 原文地址:https://www.cnblogs.com/feiyucha/p/10235038.html
Copyright © 2011-2022 走看看