如题目

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      fs: TFileStream;
      nBlock, i: integer;
      fsize, fpersize: int64;
      txtf: TextFile;
      tmp: TMemoryStream;
    begin
      // 读取源文件
      fs := TFileStream.Create('c:\abc.rar', fmOpenRead);
      fpersize := 255;
      fsize := fs.Size;
      // nBlock:分割后文件个数
      nBlock := fsize div fpersize;
      // 保存分割信息文件
      // fsize, nBlock, fpersize
      AssignFile(txtf, 'c:\abc.rar.sin');
      ReWrite(txtf);
      Writeln(txtf, 'abc.rar');   // 文件名
      Writeln(txtf, fsize);       // 文件大小
      Writeln(txtf, nBlock);      // 文件个数
      Writeln(txtf, fpersize);    // 每个文件大小
      Writeln(txtf, '0');         // 零头和最后一个存到一起
      CloseFile(txtf);
      // 分割文件
      for i := 1 to nBlock do
      begin
        tmp := TMemoryStream.Create;
        if i = nBlock then
          Inc(fpersize, fsize mod fpersize);
        tmp.CopyFrom(fs, fpersize);
        tmp.SaveToFile('c:\abc.rar.' + IntToStr(i));
        tmp.Free;
      end;
      fs.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      fs: TFileStream;
      nBlock, i: integer;
      fsize, fpersize: int64;
      txtf: TextFile;
      fn: string;
      tmp: TMemoryStream;
    begin
      // 取文件信息
      AssignFile(txtf, 'c:\abc.rar.sin');
      ReSet(txtf);
      Readln(txtf, fn);
      Readln(txtf, fsize);
      Readln(txtf, nBlock);
      Readln(txtf, fpersize);
      CloseFile(txtf);
      // 创建新的文件
      fs := TFileStream.Create('d:\' + fn, fmCreate);
      for i := 1 to nBlock do
      begin
        tmp := TMemoryStream.Create;
        tmp.LoadFromFile('c:\abc.rar.' + IntToStr(i));
        // 把分割的文件流全部读到新文件中
        if i = nBlock then
          Inc(fpersize, fsize mod fpersize);
        fs.CopyFrom(tmp, fpersize);
        tmp.Free;
      end;
      fs.Free;
    end;