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

檔案packed record的寫入

尚未結案
spencerkuo
一般會員


發表:21
回覆:34
積分:11
註冊:2003-08-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-12 15:54:44 IP:61.59.xxx.xxx 未訂閱
請問各位大大 要如何才能在 TfileStream.create 後, 加入多個packed record? 還有如何才能讀出多個packed record? 謝謝, 感激不盡
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-13 16:50:54 IP:220.130.xxx.xxx 未訂閱
packed record用意在於你自訂的Record它的Size不會因為程式最佳化的影響而被調整成4的倍數.    type
  TRec = packed record
          I: Word;
    A: Integer;
    B: Byte;
    C: Word;
    D: Char;
  end;    implementation    procedure TForm1.Button2Click(Sender: TObject);
var
  I, ByteRead, Count: Integer;
  R: TRec;
  P: array of TRec;
  F: TFileStream;
begin
  F := TFileStream.Create('C:\TEST.DAT', fmCreate);
  try
    for I := 0 to 99 do
    begin
      R.I := I;
      R.A := Random(MaxInt);
      R.B := Random(MaxByte);
      R.C := Random(MaxWord);
      R.D := Char(Random(MaxByte));
      F.Write(R, SizeOf(R));
    end;
  finally
    F.Free;
  end;      if FileExists('C:\TEST.DAT') then
  begin
    F := TFileStream.Create('C:\TEST.DAT', fmOpenRead);
    try
      SetLength(P, 100); //配置 100 筆資料所需記憶體
      try
        ByteRead := SizeOf(TRec) * Length(P);
        ByteRead := F.Read(Pointer(P)^, ByteRead);
        Count := ByteRead div SizeOf(TRec);
        ListBox1.Clear;
        for I := 0 to Count-1 do
           ListBox1.Items.Add(IntToStr(P[I].I));
      finally
        P := nil;
      end;
    finally
      F.Free;
    end;
  end;    end;    
系統時間:2024-05-17 11:51:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!