線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6652
推到 Plurk!
推到 Facebook!

檔案的分割與合併

 
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-19 14:24:30 IP:203.204.xxx.xxx 未訂閱
最近因為自己 NoteBook 的網路卡怪怪的,在 2K 下就是不 work! 使得在廠商那裝機、更新程式都得使用磁片來更新,而程式愈寫愈大,一片小小的 1.44MB 又如何裝的下... 又因裝機的系統不可能再裝其他的工具程式,如 WinZIP 或 WinRAR 等有分片壓縮的功能,只能使用該 IPC 上的 WinXP 內建的 ZIP 功能... 為使更新程式、資料方便,於是寫一個小小的工具用來「分割」及「合併」檔案。這個小工具使用 BCB5 開發,主要使用 TMemoryStream 來分割及合併檔案,可以算是 TMemoryStream 的應用教學吧  使用 ><>< src="http://www.taconet.com.tw/dllee/gif/dlleebn.gif">
C及指標教學 http://coolsite.to/dllee介紹Shells http://coolsite.to/ushells
------
http://www.ViewMove.com
附加檔案:22161_SplitMerge.zip
chfamy
中階會員


發表:87
回覆:161
積分:54
註冊:2002-05-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-27 21:04:16 IP:61.219.xxx.xxx 未訂閱
請問有Delphi版本範例可供參考?謝謝.
liorex
初階會員


發表:19
回覆:60
積分:32
註冊:2002-08-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-20 21:13:03 IP:211.76.xxx.xxx 未訂閱
感謝dllee的分享,我將它改寫成功能相仿的DELPHI版程式,只是 因為是測試用的來源與解開都是寫在固定目錄,需要的人可以 COPY下來改一改,希望能滿足chfamy的需求  
 
procedure TForm1.Button1Click(Sender: TObject);
var
 FileStream,BakFileStream : TMemoryStream;
 FSize,
 i: Integer ;
begin              //Split
  FileStream := TMemoryStream.Create ;
  try
    FileStream.LoadFromFile('F:\test\BackProg.exe');
    FileStream.Position := 0 ;
    FSize := FileStream.Size ;
    I := 0 ;
    while true do
    begin
      inc(i);
      if (FileStream.Size - FileStream.Position >= 402400) and
         ((FileStream.Size - FileStream.Position) > 0)then
      begin
         with TMemoryStream.Create do
         begin
           try
             CopyFrom(FileStream,402400);
             SaveToFile('F:\test\testSTr' inttostr(i));
           finally
             Free ;
           end;
         end;
      end else if (FileStream.Size - FileStream.Position > 0) then
      begin
         with TMemoryStream.Create do
         begin
           try
             CopyFrom(FileStream,FileStream.Size - FileStream.Position);
             SaveToFile('F:\test\testSTr' inttostr(i));
           finally
             Free ;
           end;
         end;
      end else
         Break ;
     end ;      finally
    FreeandNil(FileStream);
  end;
end;    procedure TForm1.Button2Click(Sender: TObject);
var
 FileStream,BakFileStream : TMemoryStream;
 FSize,
 i: Integer ;
Begin                  //BtnMergeClick
  FileStream := TMemoryStream.create ;
  try
    i := 0;
    inc(i);              // 取得來源的檔案
    while FileExists('F:\test\testSTr' inttostr(i)) do
    begin
      BakFileStream := TMemoryStream.Create ;
      with BakFileStream do
      begin
        try
          LoadFromFile('F:\test\testSTr' inttostr(i));
          Position := 0 ;
          FileStream.CopyFrom(BakFileStream,BakFileStream.Size)
        finally
          Free ;
        end;
      end;
      inc(i);
    end;
  finally
    FileStream.SaveToFile('F:\test\test.exe');
    FileStream.Free;
  end;
end ;
---------------------- 一切有為法 如夢幻泡影 如露亦如電 應做如是觀 ----------------------
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-20 23:50:04 IP:61.224.xxx.xxx 未訂閱
感謝 liorex 分享。    說真的,簡單的 Delphi 還可以看懂,複雜一點看來就很吃力,如果要重頭用 Delphi 寫,那還真是要我的命  <>沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
chfamy
中階會員


發表:87
回覆:161
積分:54
註冊:2002-05-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-24 19:01:07 IP:61.219.xxx.xxx 未訂閱
非常謝謝liorex您幫了我大忙,再次謝謝.
系統時間:2024-12-04 16:38:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!