程序大致如下,做了一个过程,声明了一个字符串局部变量,过程要求从INI文件中要取某个Section的Value,但出现问题,只能读出2047个字符(value大概有4K左右),后来我把string改成了AnsiString, 而且也把编译器开关{$H+}打开了,但就是读不出. delphi的帮助文档中写了AnsiSTRING可以支持2^31个字符,为什么读不出?快!帮忙!救命啊,在线等

解决方案 »

  1.   

    上午看到这个问题,正要回答,结果公司的路由器坏了。
    VCL内部定义的缓冲区大小为0..2047,所以你不能完全读出Value。可以用一个API函数直接读取:GetPrivateProfileString(PChar(Section),
        PChar(KeyName), PChar(Default), Buffer, SizeOf(Buffer), PChar(FileName));使用时,将缓冲区Buffer设置足够大就可以了。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    to lxpbuaa(桂枝香在故国晚秋):我后来也发现了这个问题,但是我又发现GetPrivateProfileString将Buffer限制在了4095(我手工测试的,如果你将Buffer: array [0..8191] of char这样设置,它也只读出4095个字节出来), 我的文件有4K多,还有一部分读不出来啊!!急!!还有没有别的办法??
      

  3.   

    来听课
    是否可以考虑不用INI文件呢?
      

  4.   

    alenwelkin(助人~~~为乐):
    那你就用TFileStream来读。或者保存这个值时,分为几段,如Value1、Value2……
    人总是灵活的。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  5.   

    1。把ini文件拆成多个文件,
    2。用tinydb之类的替代品。
      

  6.   

    同意: lxpbuaa(桂枝香在故国晚秋) 不一定非要去从读出这里找一个实现,只要解决读出来即可"人总是灵活的。"   <-----赞同
      

  7.   

    用流保存不就行了,这么大的数据量何必用ini呢
      

  8.   

    问题已经解决了,GetPrivateProfileString没有问题,数据正好是4K(去掉Section Value)以后,调试的时候用鼠标看值没有全显示出来,用Evaluate算值的时候又算出是4K,我还以为是限制住了。搞得大家晕,不好意思。其实如果用INI相关的API解决不了问题我就打算自己写个类去读文件了。但主要是因为程序大部分已经写好了,待读的INI文件太大,读到一半的时候出了问题,要改程序又比较麻烦,无耐过来救,多谢各位了。
      

  9.   

    to  bluenightsky() :不是我要用INI保存,是别人要用,是一个程控交换机的数据文件。