我用ReadString读ini文件,读取出来的String没我存储的String那么长(我的String最多可能有一万个字符,有的String读出来就是1052个字符,有的读出来是1133个字符,其最大读取数量是多少?为什么会出现我这种问题?

解决方案 »

  1.   

    朋友,我认为你可以用流试试,本不也不能保证这个长度的问的,我在D5与D6还有D7中都碰到这样的问题,也不知是DELPHI的原因还是什么,后来我不用INI了,就用读写流文件,那样还好的,同时可以做成自已的文件格式啊。
      

  2.   

    function TIniFile.ReadString(const Section, Ident, Default: string): string;
    var
      Buffer: array[0..2047] of Char;
    begin
      SetString(Result, Buffer, GetPrivateProfileString(PChar(Section),
        PChar(Ident), PChar(Default), Buffer, SizeOf(Buffer), PChar(FFileName)));
    end;//TIniFile开辟的缓冲最大是2047
    //另外你的字符里不能有换行符,否则会影响读取
    //可以根据如上VCL代码,开辟更大的空间即可读取function IniFileReadString(
      mSection, mIdent, mDefault: string;
      mFileName: string;
      mLength: Integer): string;
    var
      vBuffer: PChar;
    begin
      GetMem(vBuffer, mLength);
      try
        SetString(Result, vBuffer, GetPrivateProfileString(PChar(mSection),
          PChar(mIdent), PChar(mDefault), vBuffer, mLength, PChar(mFileName)));
      finally
        FreeMem(vBuffer, mLength);
      end;
    end; { IniFileReadString }procedure TForm1.Button1Click(Sender: TObject);
    var
      S: string;
    begin
      with TIniFile.Create('c:\temp\temp.ini') do try
        WriteString('Text', 'S', StringOfChar('a', 12345));
        S := IniFileReadString('Text', 'S', '', 'c:\temp\temp.ini', 20000);
        ShowMessage(IntToStr(Length(S)));
      finally
        Free;
      end;
    end;
      

  3.   

    是不是读出来的字符返回值为string,这个时候系统是默认为AnsiString,大小应该是<2^31 characters都可以的但是出这样的问题却是就奇怪了
    我一般读文件没有那么长(ini为配置文件啊),所以没出过这种问题如果太长了的话,楼主就直接用流\读文件了吧
      

  4.   

    呵呵,看了VCL源码就知道问题的所在了String太长的,建议不要使用Ini了,用XML会更好http://lysoft.7u7.net
      

  5.   

    是呀,超出范围了,太长就不要用ini了