急啊,能否把INI的数据转成二进制文件,然后再用读二进制文件的方式读出来,保持数据的准确。 
换句话说就是把INI文件转成二进制文件。 
最近做开发,用INI写UI,发现当INI文件多了且每个INI文件数据很多时有几百K,加载时,特别慢。 
所以小弟想把INI文件转成二进制文件,再读出来,速度会快很多。 
不知道怎么转,向各位高手请教。

解决方案 »

  1.   

    大的INI文件建议改为XML就可以了
    BIN方式不适合编辑
      

  2.   

    用TMemIniFile
    既然你已经几百K大了改成二进制也小不到哪去不行的话把配置存xml或者数据库。
      

  3.   

    那就不要用ini存储了
    可以用xml
    或者自己定义结构,来存储ui信息,保存时用stream去保存,读出时,根据结构来读取比如
    TInfo = record
      Caption : array [0..99] of char;
      Left : integer;
      Top : integer;
    .
    .
    .
    end;
      

  4.   

    把ini文件分散到不同的小ini文件中。
    才几百k的东西,还有人想到数据库服了,用得到这么大动干戈么。
    xml比ini解析的慢。
    或者楼主保存这种格式纯文本就可以
    value1=123
    value2=456
    用TStringList读写就可以,还简单,TStringList就是一次性把文件读到内存中的。
      

  5.   

     用XML吧 一般像这种数据都是用XML存储的 像配置文件之类 ...
      

  6.   

    同意楼上说法,INI到了几百K,就不合适了啊
      

  7.   

    我同意6楼的说法,我也是定义了结构的,问题是现在我INI文件是用来的读数据的,我想把读出来的数据存为二进制文件,再读出来。
    可问题是在存储时,ini的数据老是要报错,我不知道是怎么回事,难道INI的数据不能直接存为二进制文件吗?需要写什么转换函数吗?
    怎么写啊?
    现在用XML或数据库来不及了,我只能用INI的数据进行转换。
      

  8.   

    文本文件是二进制文件的子集,ini本来就已经是二进制文件了,还怎么二进制
    几百k其实也不算大,全加载到内存如果不算寻道和缓存的时间(第一次加载的时候会比较慢),就算开着杀毒软件也就毫秒级的
    如果慢的话恐怕不是io的问题,而是数据结构的问题
      

  9.   

    我现在问题就是第一次加载时特别慢,加载以后,速度并不慢,是正常的。
    我就想解决第一次加载慢的问题。
    关于结构问题,没办法,参数很多,而且对应不同的控件,一个控件至少50个参数,加起来至少600个参数。
    我的结构是
     GamePnInfo = packed record
      count1 : Integer;
      Info   : array[0..PNCOUNT-1] of GamePn;
     end; GameButtonInfo = packed record
      count2     : Integer;
      buttonInfo : array[0..BUTTONNUM-1] of GameButton;
     end; GameeditInfo = packed record
      count3   : Integer;
      EditInfo : array[0..EDITNUM-1] of Gameedit;
     end; GamecheckInfo = packed record
      count4    : Integer;
      checkInfo : array[0..CHECKBOXNUM-1] of Gamecheckbox;
     end; GameScrollBarInfo = packed record
      count5        : Integer;
      ScrollBarInfo : array[0..SCRBALLNUM-1] of GameScrollBar;
     end; GamelabelsInfo = packed record
      count6        : Integer;
      labelsInfo    : array[0..LABELNUM-1] of Gamelabels;
     end; GameProgressBarInfo = packed record
      count7          : Integer;
      ProgressBarInfo : array[0..PROSSBARNUM-1] of GameProgressBar;
     end; GameImageInfo = packed record
      count8    : Integer;
      ImageInfo : array[0..IAMAGENUM-1] of GameImage;
     end; GameMemoInfo = packed record
      count9    : Integer;
      MemoInfo  : array[0..MEMONUM-1] of GameMemo;
     end; GameGridInfo = packed record
      count10    : Integer;
      GridInfo   : array[0..GRIDNUM-1] of GameGrid;
     end;
     GameGridItemInfo = packed record
      count11      : Integer;
      GridItemInfo : array[0..GRIDITEMNUM-1] of GameGridItem;
     end; GameListBoxInfo = packed record
      count12     : Integer;
      ListBoxInfo : array[0..LISTBOXNUM-1] of GameListBox;
     end;
     GameListBoxItemInfo = packed record
      count13         : Integer;
      ListBoxItemInfo : array[0..LISTITEMCOUNT-1] of GameListBoxItem;
     end; GameIni = packed record
      IniFileName : string[50];
      Pn1         : GamePnInfo;
      button      : GameButtonInfo;
      edit        : GameeditInfo;
      checkbox    : GamecheckInfo;
      scrollbar   : GameScrollBarInfo;
      labels      : GamelabelsInfo;
      ProgressBar : GameProgressBarInfo;
      Image       : GameImageInfo;
      Memo        : GameMemoInfo;
      Grid        : GameGridInfo;
      GridItem    : GameGridItemInfo;
      ListBox     : GameListBoxInfo;
      ListBoxItem : GameListBoxItemInfo;
     end;GGameIni = packed record
     headercount : Integer;
     GIniFile    : array[0..INIFILENUM-1] of GameIni;
    end;
      

  10.   

    而且我不只一 个INI文件,平均下来有100K大小,大概有40个INi文件,差不多4M大小