麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

怎樣在DELPHI中實現文件切割/組合

2019-11-17 05:05:20
字體:
來源:轉載
供稿:網友
  一、 文件切割/組合原理

  所謂文件切割,就是把一個文件切割成若干個小文件。做法就是將一個文件對象以"文件流"的方式讀出,然后按照一定的塊(Block)大小分別存成文件。文件組合,就是把若干個文件組合成一個文件。比如像打包工具(Wise)用到的就是這個原理。假如大家對"流"這個概念熟悉的話,那么實現起來就很輕易了,以下就是實現步驟。  二、 實現

  在Delphi中新建一個工程,然后在窗體中加入兩個BUTTON,一個EDIT,一個OPENDIALOG,一個SAVEDIALOG,再將BUTTON1的CAPTION改為"切割",BUTTON2的CAPTION改為"組合"(注:其它控件的屬性略)。再雙擊BUTTON1和BUTTON2,寫下如下代碼:
//切割文件
PRocedure TForm1.Button1Click(Sender: TObject);
 var
  i, WantedFragSize, RealToWrite : Integer;
  //聲明兩個文件流對象
  //InStream為輸入源文件流對象,OutStream為輸出切割文件流對象
  InStream, OutStream : TFileStream;
  S : String;
 begin
  if Opendialog1.Execute then
  begin
   SaveDialog1.Title := '輸入你要保存的切割文件名';
   If SaveDialog1.Execute then
   begin
    WantedFragSize := StrtoInt(Edit1.Text); //定義切割塊大小
    i := 0;
    //以只讀的方式創建一個輸入文件流對象
    InStream:=TFileStream.Create(
    OpenDialog1.FileName,fmOpenRead);
    Try
     //假如Instream流的當前指針位置不在末尾,就按照定義的塊大小//來讀出數據并存成文件
     while (InStream.Position < InStream.Size) do
     Begin
      s := IntToStr(I);
      while Length(s) < 3 do s := '0'+s;
      s := '.'+s;
      //生成切割文件的擴展名,用三位數字來作為擴展名,方便組合文件
      //假如InStream所剩的塊大小小于定義的塊大小,則將剩下的塊數//據存成文件
      If InStream.Size - InStream.Position < WantedFragSize then
       RealToWrite := InStream.Size - InStream.Position
      else
       RealToWrite := WantedFragSize;
       //創建一個輸出文件流對象
       OutStream:=TFileStream.Create(SaveDialog1.FileName+s,fmCreate);
       try
        OutStream.CopyFrom(InStream,RealToWrite);
        Inc(i);
       Finally
        //釋放輸出文件流對象
        OutStream.Free;
        end;
       end;
      Finally
       InStream.Free;
      end;
     end;
    end;
   end; //組合文件
procedure TForm1.Button2Click(Sender: TObject);
var
 i : Integer;
 InStream, OutStream : TFileStream;
 SourcePath, FragName, S : String;
 begin
  Opendialog1.Title := '請選擇切割文件';
  if Opendialog1.Execute then
  begin
   //得到當前打開的切割文件的路徑
   SourcePath := ExtractFilePath(Opendialog1.FileName);
   //得到當前打開的切割文件的文件名
   FragName := ExtractFileName(Opendialog1.FileName);
   SaveDialog1.Title := '請輸入你要組合的文件名';
   If SaveDialog1.Execute then
   begin
    i := 0;
    s := IntToStr(I);
    while Length(s) < 3 do s := '0'+s;
     s := '.'+s;
     FragName := ChangeFileExt(FragName, s);
     //假如目錄中有以.000為擴展名的文件存在,則創建一個輸出文件流//對象
     If FileExists(SourcePath+FragName) then
     begin
      OutStream:=TFileStream.Create(Savedialog1.FileName,fmCreate);
     Try
      //按照以文件擴展名遞增的方式組合文件
      While FileExists(SourcePath+FragName) do
      Begin
       InStream:=TFileStream.Create(SourcePath+FragName,fmOpenRead);
      Try
       //將輸入文件流的數據寫入到輸出文件流中
       OutStream.CopyFrom(InStream,0);
       Inc(i);
       s := IntToStr(I);
       while Length(s) < 3 do s := '0'+s;
        s := '.'+s;
        FragName := ChangeFileExt(FragName, s);
      finally
       InStream.Free;
      end;
     end;
    finally
     OutStream.Free;
    end;
   end;
  end;
 end;
end;
  {*注釋:請注重COPYFROM方法的使用,當第二個參數為0時,表示將輸入流InStream的數據全部寫入輸出流OutStream;當大于0為N時,表示從輸入流InStream的當前流指針位置開始,將N個字節數據寫入輸出流OutStream,并且InStream的流指針會向后偏移N個字節位數。具體解釋請查看DELPHI自帶的幫助*}  三、結束語

  在我們用到的很多日常工具中,有很多都會用到的"流"這個對象,它的作用也非常大,例如文件加密,文件下載等都會涉及到"流",所以筆者認為,把握它是很有用的,也是比較重要的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久99国产伦子精品免费 | 在线成人免费av | 午夜爽爽爽男女免费观看hd | 精品一区二区在线观看视频 | 亚洲精品久久久久久久久久 | 欧美国产成人在线 | 欧美日韩免费在线观看视频 | 免费人成在线播放 | 亚洲视屏在线 | xnxx18日本 | 五月婷婷第四色 | www.91sese | 黄色片网站在线播放 | 一区二区三区欧美在线观看 | 91社区在线观看 | av在线一区二区三区四区 | 99在线精品视频免费观看20 | 免费男女视频 | 久久久久久久久久亚洲精品 | 美女视频网站黄色 | 精品国产99久久久久久宅男i | 久久精品二区 | 国产一区二区不卡视频 | av在线免费观看网址 | 亚洲第一页在线观看 | a视频在线看 | 国产精品一区二区三区99 | 黄色大片网站在线观看 | 99sesese| 欧美特黄一级高清免费的香蕉 | 九九热精品在线 | 久久久久国产成人精品亚洲午夜 | 中文字幕一区在线观看视频 | 国产91九色 | 视频一区二区三区视频 | 日韩视频在线观看免费 | 亚洲午夜一区二区三区 | 久久精品欧美一区二区 | 欧美一级美国一级 | 手机黄色小视频 | 日韩一级网站 |