delphi中操作记录文件

记录文件操作方法 

unit DayFreeze;

interface
uses Constants;

//"DayFreeze.dat"
//

Type
   TData_DayFreeze_Type = record

      TN         :  word;    //

      meter_addr :  array[0..5] of Byte;//

      stamp      :  longint;  //

      bReport    :  byte;     //

      config     :  byte;     //

      status     :  word ;    //

      energy     :  longword ;//

end;


type
     TDayFreeze =  array [0..METERNUM-1,0..63] of TData_DayFreeze_Type;

     TDayFreezeFile = File Of TDayFreeze;

     TADayFreezeFile = File Of TData_DayFreeze_Type;

var
     g_fDayFreeze : TDayFreeze;

//接口函数
procedure getDayFreezeDataFromFile(var fDayFreeze : TDayFreeze; filename : string);

function  getDayFreezeDataFromFileEx(filename : string) : integer;

implementation
uses Windows, SysUtils, Global, DateUtils;


//

procedure getDayFreezeDataFromFile(var fDayFreeze : TDayFreeze; filename : string);
var
   fDayFreezeFile : TDayFreezeFile;
begin
   AssignFile(fDayFreezeFile, filename);
   if FileExists(filename) then
   begin
      Reset(fDayFreezeFile);
      try
         Read(fDayFreezeFile, fDayFreeze);
      finally
         CloseFile(fDayFreezeFile);
      end;
   end
end;


//

function getDayFreezeDataFromFileEx(filename : string) : integer;
var
   fADayFreezeFile : TADayFreezeFile;
   fADayFreeze     : TData_DayFreeze_Type;
   i, j : integer;
   pos : Longint;
   count : Longint;
begin
   result := 0;
   count := 0;
   AssignFile(fADayFreezeFile, filename);
   if FileExists(filename) then
   begin
      Reset(fADayFreezeFile);
      count := filesize(fADayFreezeFile);
      i := 0; j := 0;  pos := 0;
      try
         While Not Eof(fADayFreezeFile) do
         begin
             Seek(fADayFreezeFile, result);
             Read(fADayFreezeFile, fADayFreeze);
             CopyMemory(@g_fDayFreeze[i, j], @fADayFreeze, sizeof(TData_DayFreeze_Type));
             inc(j);
             if (j = 64) then
             begin
                 inc(i);
                 j := 0;
             end;
             if (i > METERNUM * 64) then
                 break;
             inc(result);
         end;
      finally
         CloseFile(fADayFreezeFile);
      end;
   end;
   if (count <> result) then
      result := -1;
end;


end.

一种方法就是将所有记录存放在一个大的缓冲区中,一个read操作就可以将文件中的所有数据都读出来;如getDayFreezeDataFromFile;

另一种方法就是一条记录一条记录的读,注意到seek的用法,它的第二个参数是以条数为变量。如getDayFreezeDataFromFileEx;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值