关于INI文件转存为二进制文件

zhurui2001113 2009-02-22 09:11:25
急啊,能否把INI的数据转成二进制文件,然后再用读二进制文件的方式读出来,保持数据的准确。
换句话说就是把INI文件转成二进制文件。
最近做开发,用INI写UI,发现当INI文件多了且每个INI文件数据很多时有几百K,加载时,特别慢。
所以小弟想把INI文件转成二进制文件,再读出来,速度会快很多。
不知道怎么转,向各位高手请教。
...全文
351 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yc_8301 2009-02-24
  • 打赏
  • 举报
回复
up
zhurui2001113 2009-02-23
  • 打赏
  • 举报
回复
而且我不只一 个INI文件,平均下来有100K大小,大概有40个INi文件,差不多4M大小
zhurui2001113 2009-02-23
  • 打赏
  • 举报
回复
我现在问题就是第一次加载时特别慢,加载以后,速度并不慢,是正常的。
我就想解决第一次加载慢的问题。
关于结构问题,没办法,参数很多,而且对应不同的控件,一个控件至少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;
Seamour 2009-02-23
  • 打赏
  • 举报
回复
文本文件是二进制文件的子集,ini本来就已经是二进制文件了,还怎么二进制。。。
几百k其实也不算大,全加载到内存如果不算寻道和缓存的时间(第一次加载的时候会比较慢),就算开着杀毒软件也就毫秒级的
如果慢的话恐怕不是io的问题,而是数据结构的问题
zhurui2001113 2009-02-23
  • 打赏
  • 举报
回复
我同意6楼的说法,我也是定义了结构的,问题是现在我INI文件是用来的读数据的,我想把读出来的数据存为二进制文件,再读出来。
可问题是在存储时,ini的数据老是要报错,我不知道是怎么回事,难道INI的数据不能直接存为二进制文件吗?需要写什么转换函数吗?
怎么写啊?
现在用XML或数据库来不及了,我只能用INI的数据进行转换。
僵哥 2009-02-22
  • 打赏
  • 举报
回复
可以试试TMemIniFile
ly_liuyang 2009-02-22
  • 打赏
  • 举报
回复
大的INI文件建议改为XML就可以了
BIN方式不适合编辑
不得闲 2009-02-22
  • 打赏
  • 举报
回复
同意楼上说法,INI到了几百K,就不合适了啊
genispan 2009-02-22
  • 打赏
  • 举报
回复
用XML吧 一般像这种数据都是用XML存储的 像配置文件之类 ...
hemiya 2009-02-22
  • 打赏
  • 举报
回复
把ini文件分散到不同的小ini文件中。
才几百k的东西,还有人想到数据库服了,用得到这么大动干戈么。
xml比ini解析的慢。
或者楼主保存这种格式纯文本就可以
value1=123
value2=456
用TStringList读写就可以,还简单,TStringList就是一次性把文件读到内存中的。
bdmh 2009-02-22
  • 打赏
  • 举报
回复
那就不要用ini存储了
可以用xml
或者自己定义结构,来存储ui信息,保存时用stream去保存,读出时,根据结构来读取

比如
TInfo = record
Caption : array [0..99] of char;
Left : integer;
Top : integer;
.
.
.
end;
preserve 2009-02-22
  • 打赏
  • 举报
回复
用TMemIniFile
既然你已经几百K大了改成二进制也小不到哪去

不行的话把配置存xml或者数据库。
IDtoID 2009-02-22
  • 打赏
  • 举报
回复
学习
嗷嗷叫的老马 2009-02-22
  • 打赏
  • 举报
回复
关注一下

直接读入内存再在内存里处理,应该会快得多....

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧