德尔福保存并加载动态数组 [英] delphi Save and Load dynamic array

查看:129
本文介绍了德尔福保存并加载动态数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请有人可以帮助我在拯救,并从流加载其动态数组

 常量
      iGlobHolderCount = 100;    类型
      TFiLeSpec =记录
        iSize:整数;
      结束;      TFileSpecLst = TFiLeSpec阵列;      TFiLeSpecList =记录
        伊明:整数;
        IMAX:整数;
        ICOUNT:整数;
        FileSpecLst:TFileSpecLst;
      结束;
VAR
FFileSpec:TFiLeSpec的阵列;FFileSpecList:数组[1 .. iGlobHolderCount] TFiLeSpecList的;


解决方案

先写一个数组的长度,和旁边的阵列数据:

 键入
  TItem =整数;
  TItemArray = TItem阵列;VAR
  流:TStream;
  编曲:TItemArray;
  L:长字;开始
  编曲:= TItemArray.Create(1,2,3);
//保存
  流:= TFileStream.Create('C:\\ TEMP \\ TEST.bin,烧写',fmCreate);
  L:=长度(ARR);
  Stream.WriteBuffer(L,一下SizeOf(L));
  Stream.WriteBuffer(指针(ARR)^,L *一下SizeOf(TItem));
  Stream.Free;
// 加载
  流:= TFileStream.Create('C:\\ TEMP \\ TEST.bin,烧写',fmOpenRead);
  Stream.ReadBuffer(L,一下SizeOf(L));
  SetLength函数(编曲,L);
  Stream.ReadBuffer(指针(ARR)^,L *一下SizeOf(TItem));
  Stream.Free;
结束;

please can someone help me in saving and loading its Dynamic array from a Stream

const
      iGlobHolderCount = 100;

    type
      TFiLeSpec = record
        iSize: Integer;
      end;

      TFileSpecLst = array of TFiLeSpec;

      TFiLeSpecList = record
        iMin: Integer;
        iMax: Integer;
        iCount: Integer;
        FileSpecLst: TFileSpecLst;
      end;


var
FFileSpec: array of TFiLeSpec;

FFileSpecList: array [1 .. iGlobHolderCount] of TFiLeSpecList;

解决方案

Write first the length of an array, and next the array data:

type
  TItem = Integer;
  TItemArray = array of TItem;

var
  Stream: TStream;
  Arr: TItemArray;
  L: LongWord;

begin
  Arr:= TItemArray.Create(1, 2, 3);
// To save
  Stream:= TFileStream.Create('C:\Temp\test.bin', fmCreate);
  L:= Length(Arr);
  Stream.WriteBuffer(L, SizeOf(L));
  Stream.WriteBuffer(Pointer(Arr)^, L * SizeOf(TItem));
  Stream.Free;
// To load
  Stream:= TFileStream.Create('C:\Temp\test.bin', fmOpenRead);
  Stream.ReadBuffer(L, SizeOf(L));
  SetLength(Arr, L);
  Stream.ReadBuffer(Pointer(Arr)^, L * SizeOf(TItem));
  Stream.Free;
end;

这篇关于德尔福保存并加载动态数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆