protected void button3_Click(object sender, System.EventArgs e)    {
        // Proceed
        if(splitFile){
            FileStream inFile = new FileStream(f.ToString(),FileMode.OpenOrCreate, FileAccess.Read);
            for (int i = 0; i<x ; i++){
                FileStream outFile = new FileStream(i+".sg",FileMode.OpenOrCreate, FileAccess.Write);
                 int data=0;                 byte [] buffer = new byte [eachSize];
                 if ((data=inFile.Read(buffer,0,eachSize))>0){
                    outFile.Write(buffer,0,data);
                  }
                  outFile.Close();
              }
            inFile.Close();
            label4.Visible = true;
            label4.Text = "SplitFile completed sucessfully";
        }
        else{
            FileStream outFile = new FileStream(outputName,FileMode.OpenOrCreate, FileAccess.Write);            for (int i=0;i<x; i++){
                 int data=0;
                   byte [] buffer = new byte [1024];
                FileStream inFile = new FileStream(i+".sg",FileMode.OpenOrCreate, FileAccess.Read);
                while ((data=inFile.Read(buffer,0,1024))>0){
                    outFile.Write(buffer,0,data);
                  }
                  inFile.Close();
            }
            outFile.Close();
            label4.Visible = true;
            label4.Text = "MergeFile completed sucessfully";
        }
    }
呵呵,一部分.如果需要,给你整个project

解决方案 »

  1.   

    /// <summary>
    /// 文件分割
    /// </summary>
    /// <param name="FileName"></param> 要分割的大文件名称
    /// <param name="DirectoryName"></param> 分割成的小文件放入的目录
    /// <param name="FileSizeMB"></param> 小文件的最大长度,单位为MB 
    private void FileSplit(string FileName, string DirectoryName, float FileSizeMB)
    {
    int FileSize=(int)(FileSizeMB*1024*1024);  //转换文件大小
    if(Directory.Exists(DirectoryName)) Directory.Delete(DirectoryName,true);  //如果原目录存在则删除
    Directory.CreateDirectory(DirectoryName);  //创建目录
    FileStream MyStream=new FileStream(FileName, FileMode.Open);  //文件流
    BinaryReader MyReader=new BinaryReader(MyStream);  //文件阅读器
    byte[] TempBytes;  //每次分割读取的最大数据
    int FileCount=(int)(MyStream.Length/FileSize);  //小文件总数
    if(MyStream.Length%FileSize!=0) FileCount++;
    string[] TempExtra=FileName.Split('.');
    /*  循环将大文件分割成多个小文件  */
    for(int i=1;i<=FileCount;i++)
    {
    string TempFile=DirectoryName+@"\"+i.ToString().PadLeft(4,'0')+"."+TempExtra[TempExtra.Length-1];  //小文件名
    SetProgressInfomation(TempFile, i*1.0f/FileCount);  //进度信息
    FileStream TempStream=new FileStream(TempFile, FileMode.OpenOrCreate);  //文件流
    BinaryWriter TempWriter=new BinaryWriter(TempStream);  //小文件书写器
    TempBytes=MyReader.ReadBytes(FileSize);          //读取大文件数据
    TempWriter.Write(TempBytes);  //数据写入小文件
    TempWriter.Close();    //关闭小文件书写器
    TempStream.Close();    //关闭文件流
    }
    MyReader.Close();    //关闭大文件阅读器
    MyStream.Close();    //关闭文件流
    } /// <summary>
    /// 文件合并
    /// </summary>
    /// <param name="DirectoryName"></param>  要合并的小文件目录
    /// <param name="FileName"></param>  合并后的文件名称
    private void FileMerge(string DirectoryName, string FileName)
    {
    string[] MyFileNames=Directory.GetFiles(DirectoryName);  //取得设置目录下的所有小文件
    FileStream MyStream=new FileStream(FileName, FileMode.OpenOrCreate);  //大文件流
    BinaryWriter MyWriter=new BinaryWriter(MyStream);  //大文件书写器
    /* 循环多个小文件,并合并为大文件 */
    int FileIndex=0;
    foreach(string TempFile in MyFileNames)
    {
    SetProgressInfomation(TempFile, (++FileIndex)*1.0f/MyFileNames.Length);  //进度信息
    FileStream TempStream=new FileStream(TempFile, FileMode.Open);  //小文件流
    BinaryReader TempReader=new BinaryReader(TempStream);  //小文件阅读器
    MyWriter.Write(TempReader.ReadBytes((int)TempStream.Length));  //读出小文件数据,并写入大文件
    TempReader.Close();   //关闭小文件阅读器
    TempStream.Close();   //关闭小文件流
    }
    MyWriter.Close();  //关闭大文件书写器
    MyStream.Close();  //关闭大文件流
    }