代码很简单,我要读取遨游目录下ini文件
procedure TForm1.Button1Click(Sender: TObject);
var
  FIniFile: TIniFile;
begin  FIniFile := TIniFile.Create('C:\Program Files\Maxthon2\SharedAccount\Config\Plugins.ini');
  try
   if FiniFile.SectionExists('Settings') then begin
     showmessage('SectionExists');
     if FiniFile.ValueExists('Settings','LoadAllIEPlugin') then
       showmessage('ValueExists');
   end;
    FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
  finally
    FreeAndNil(FIniFile);
  end;
'SectionExists'消息框不出来,也就是说根本没读取到Settings这个小结名
FiniFile.WriteString('Settings','LoadAllIEPlugin','1');
这句在ini文件末尾又加了一个[Settings] LoadAllIEPlugin=1,也就是说读取不到后又自动创建了这个小结,第二次点击按钮
'SectionExists'消息框就会弹出提示,说明可以读取到。
另外我如果建一个空白的ini文件,把这个已经存在的ini文件的内容拷贝过来后,也能够第一次就读取到[Settings]的值,这是怎么回事呀。感觉是自己新建的就可以读取到,对已经生成的就无法读取到。

解决方案 »

  1.   

    都是直接拷贝过来的呀。读取section段的消息'SectionExists'根本不执行。说明根本没读取到
      

  2.   

    我另外新建一个ini文件,把原来的ini文件内容直接拷贝到新建的ini文件里,可以读取出来。但是就是无法读取原来的ini文件,我复制原来的ini文件,读这个复制的文件也同样读取不到。就是原先建好的无法读取,非要新建一个才能读取
      

  3.   

    {配置文件读写}
      if FileExists(AppPath + 'xxx.ini') then
      begin
        MyIni := TIniFile.Create(AppPath + 'xxx.ini');
        EditPort.Text := MyIni.ReadString('set', 'aaa', '');
        EditKey.Text := MyIni.ReadString('set', 'bbb', '');
        MyIni.Destroy;
      end
      else
      begin    MyIni := TIniFile.Create(AppPath + 'xxx.ini');
        MyIni.WriteString('set', 'aaa', 111);
        MyIni.WriteString('set', 'bbb', 222);
        MyIni.Destroy;
      end;
      

  4.   

    看了楼主的杰作认为有点搞笑,首先你查找的项未找到,说明此项在文件中不存在,但你后面加载了一个语句是FiniFile.WriteString('Settings','LoadAllIEPlugin','1'); 而后,点击第二次按钮事件就发现会出现对话框,你以为第一次的INI文件有问题,就又创建了一个空的INI文件,并考备了第一次按钮事件后的INI文件内容,
    呵呵
    此时的  'Settings','LoadAllIEPlugin','1' 这一项是已经存在的,
    试问LZ,
    你是写代码急晕了吗?
      

  5.   

    楼主不要急,把思路理清楚
    需要说明的是:
    FiniFile.WriteString('Settings','LoadAllIEPlugin','1'); 
    这个write动作,如果原来没有settings节,则会自动创建这个节
      

  6.   

    回复liuhuan992,那个确实应该放在判断里面。这个没错。
    但是我把那段writestring的屏蔽了,不写总可以吧。
    但是不屏蔽FiniFile.WriteString('Settings','LoadAllIEPlugin','1'); 却又能添加一个新的'Settings'+LoadAllIEPlugin,则还是说明上面的判断没执行,因为如果存在这个的的'Settings'的话,应该是直接更新原来已经存在的LoadAllIEPlugin的键值,而不是又重新添加一个新的一样的Section呀,也就是说根本就是忽略了原来的同样的Section,重新创建一个新的Section
      

  7.   

    同样的代码我目录改成windows下的一个配置文件('C:\WINDOWS\win.ini'),
    但是能修改成功,直接修改了一个,而不是又增加了一个新的Section
    procedure TForm1.Button1Click(Sender: TObject);
    var
      FIniFile: TIniFile;
    begin  FIniFile := TIniFile.Create('C:\WINDOWS\win.ini');
      try
      if FiniFile.SectionExists('SciCalc') then begin
        showmessage('SectionExists');
        if FiniFile.ValueExists('SciCalc','layout') then
          showmessage('ValueExists');
      end;
        FiniFile.WriteString('SciCalc','layout','1');
      finally
        FreeAndNil(FIniFile);
      end;
    end;现在的问题是,是不是文件有什么问题?还是说ini文件是不是在什么情况需要进行什么特别处理
    各位有遨游的能否做个demo测试一下那个文件来修改一下里面的参数看能否成功,就知道我说的
    问题了
      

  8.   

    找到读不出的原因了,但是该如何解决???
    我写了下面的代码读取
    FileContent   :=   TStringList.Create;
      if   FileExists('C:\Program Files\Maxthon2.5.4\SharedAccount\Config\Plugins.ini')   then
          begin
              FileContent.LoadFromFile('C:\Program Files\Maxthon2\SharedAccount\Config\Plugins.ini');
              showmessage(FileContent.Text);
      //自己写代码操作吧。
          end;消息框弹出的本来应该是[Paths]才是正确的,但是消息框弹出的确是   楉煆Paths],前面的
     [ 变了“楉煆”乱码难怪读取不到,所以才创建了一个[Paths]。但是我直接打开ini文件看的又是两个[Paths]这种应该如何处理呀?不可能先删除ini文件再重新创建吧。是否需要转码一类的工作
      

  9.   

    1、是不是文件读写权限问题?
    2、是不是文件编码(gb2312、utf-8/16)的问题?
      

  10.   

    就是一个ini文件呀。我发现这个ini文件通过直接读取文件的方式,文件都是第一行会这样
    比如[Paths]
          ....
          ....
    我改成
         换行
         [Paths]
           ....
           ....
    我把原来的第一行换了一行就可以读出来了。怎么回事,而且我通过直接读取文件的方式也
    就是第一行的 [ 符号变成乱码。
      

  11.   

    各位,怎么转换呀读取ini文件的时候?没人遇过这样的问题吗
      

  12.   

    我还发现这个文件打开后另存为“编码”默认是utf-8
    而我新建的普通文本做成的ini文件打开后另存“编码”默认是Ansi,是不是
    编码问题导致读取不了?还需要经过何种转换