我把几个文本文件合成一个文本文件,其中一个文件是recordfile,保存的是每个文件大小情况,
放在合成文件的前面。现在这个recordfile我已经可以读出分割出来(就是每个文件大小已经知道),
其他文件分离,没有成功!
我已经试了好久,没有成功,希望各位高手多多帮忙!!!

解决方案 »

  1.   

    unit DestPath;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, FileCtrl;type
      TDestPathForm = class(TForm)
        DriveComboBox1: TDriveComboBox;
        DirectoryListBox1: TDirectoryListBox;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DestPathForm: TDestPathForm;implementationuses MainUnit;{$R *.dfm}procedure TDestPathForm.Button1Click(Sender: TObject);
    begin
      Dir:= DirectoryListBox1.Directory;
      close;
    end;procedure TDestPathForm.Button2Click(Sender: TObject);
    begin
      close;
    end;end.××××××××××××××××××××××unit MainUnit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ExtCtrls, DestPath;type
      TXCutForm = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        Memo1: TMemo;
        OpenDialog1: TOpenDialog;
        RadioGroup1: TRadioGroup;
        prbCut: TProgressBar;
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      XCutForm: TXCutForm;
      FilePath: string;
      Dir: string;implementation{$R *.dfm}procedure TXCutForm.Button1Click(Sender: TObject);
    begin
      if opendialog1.Execute then
      begin
        filepath:= opendialog1.FileName;
        button2.Enabled:= true;
        button3.Enabled:= true;
      end;
    end;procedure TXCutForm.Button2Click(Sender: TObject);
    begin
      DestPathForm.Show;
    end;procedure TXCutForm.Button3Click(Sender: TObject);
    var
      fs: TFileStream;
      ms: TMemoryStream;
      filesize,filecount: integer;
      bat: TextFile;
      i: integer;
    begin
      if PageControl1.ActivePage = TabSheet1 then
      begin
        case RadioGroup1.ItemIndex of
          0: filesize:= 2000*1024;
          1: filesize:= 1440*1024;
          2: filesize:= 1200*1024;
          3: filesize:= 1000*1024;
          4: filesize:= 720*1024;
          5: filesize:= 500*1024;
          6: filesize:= 300*1024;
          7: filesize:= 200*1024;
        else filesize:= 100*1024;
        end;
      end else
          begin
            filesize:= strtoint(edit1.Text)*1024;
          end;  fs:= TFileStream.Create(filepath,fmopenread);
      ms:= TMemoryStream.Create;
      filecount:= 1;
      prbcut.Min:= 0;
      prbcut.Max:= (fs.Size div filesize) +1;
      prbcut.Step:= 1;
      while fs.Position < fs.Size - 1 do
      begin
        ms.Position:= 0;
        ms.Size:= 0;
        if fs.Size - fs.Position < filesize then filesize:= fs.Size - fs.Position;
        ms.CopyFrom(fs,filesize);
        application.ProcessMessages;
        prbcut.StepIt;
        ms.SaveToFile(dir+'\'+extractfilename(filepath)+'.'+inttostr(filecount));
        memo1.Lines.Add('正在切割第 '+inttostr(filecount)+' 个文件!');
        inc(filecount);
      end;  assignfile(bat,dir+'\'+changefileext(extractfilename(filepath),'.bat'));
      rewrite(bat);
      writeln(bat,'echo off');
      writeln(bat,'echo 谢谢使用文件切割 XCut 1.0.....');
      writeln(bat,'echo.');
      writeln(bat,'echo 正在准备生成文件'+extractfilename(filepath));
      writeln(bat,'echo.');
      writeln(bat,'echo 您可以按【Ctrl+Z】组合键中止,按其它键继续!');
      writeln(bat,'pause');
      for i:= 1 to filecount+1 do
      begin
        if i = 1 then writeln(bat,'copy'+extractfilename(filepath)+'.1/b'+extractfilename(filepath))
        else writeln(bat,'copy'+extractfilename(filepath)+'/b+'+extractfilename(filepath)+'.'+inttostr(i)+'/b');
      end;
      memo1.Lines.Add('正在生成合并命令文件:'+changefileext(extractfilename(filepath),'.bat'));
      closefile(bat);
      memo1.Lines.Add('文件切割成功!');
      application.MessageBox('文件切割完成!','恭喜',MB_OK+MB_ICONINFORMATION);
    end;procedure TXCutForm.Button4Click(Sender: TObject);
    begin
      close;
    end;end.