大家好,我有一个edit框捕获OpenDialog的文件名,然后将该串string写到ini文件中去,却发现直接在edit框里写的string能写到文件中,而通过opendialog得到的string却怎么也些不到ini文件中,正是太奇怪了,不知道大家遇到过没有这种情况,希望有高人指点一二,谢谢。
代码如下://打开选项窗口
procedure TFormMain.ActToolOptionExecute(Sender: TObject);
begin
  Application.CreateForm(TFormOption,FormOption);
  if FormOption.ShowModal = mrOK then  //存储所有配置信息
  with FormOption do
  begin
    ini.WriteString('SZbp','Sjswt',Trim(EdSjswt.Text));
  end;
  FormOption.Release;
end;//选择深交所委托库
procedure TFormOption.BtnOpnSjswtClick(Sender: TObject);
begin
  OpnSjswtDlg.Filter := 'DBF文件(*.dbf)|*.dbf|所有文件(*.*)|*.*';
  OpnSjswtDlg.Title := '请选择深交所委托库(*.dbf)';
  OpnSjswtDlg.FileName := '';
  if (OpnSjswtDlg.Execute) then
    EdSjswt.Text := OpnSjswtDlg.FileName;
end;之前ini文件已经正常初始化了,自我感觉代码应该没有问题的呀。

解决方案 »

  1.   

    改一下看看:
    procedure TFormOption.BtnOpnSjswtClick(Sender: TObject);
    begin
      OpnSjswtDlg.Filter := 'DBF文件(*.dbf)|*.dbf|所有文件(*.*)|*.*';
      OpnSjswtDlg.Title := '请选择深交所委托库(*.dbf)';
      OpnSjswtDlg.FileName := '';
      if (OpnSjswtDlg.Execute) then
      begin
        if OpnSjswtDlg.FileName <> '' then
        begin
          EdSjswt.Text := OpnSjswtDlg.FileName;
        end
        else
        begin
          showmessage('没有选择文件');
        end;
      end;
    end;
      

  2.   

    试了一下,没问题啊。写入ini前,跟踪一下这个值是什么。
      

  3.   

    ini不可能会有问题的~~ 你写数据之前写把你的ini给create一下,看看是否有把ini文件打开~~ ini.WriteString('SZbp','Sjswt',Trim(EdSjswt.Text));看看是否在这出的错 
      

  4.   

    我ini文件已经create了,更踪发现一切正常,数据也对,当时一旦用过opendialog就是能写到内存却写不到磁盘上,是不是二者有冲突呀?我指的是数据没有写到磁盘上,而不是没有写到内存里,更踪发现数据是写到了内存里的。
      

  5.   

    根据keyz的提议我写了一个简单的程序,但是问题依旧(只要用了OpenDialog,数据能写到内存,但是不能真实的写到磁盘上),真是太奇怪了。大家群策群力帮我试试看,谢谢。
    另外我用的是delphi7.0(Build 8.1)以下是ini文件内容:
    [general]
    filename=111111以下是程序代码:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ini := TiniFile.Create('.\sini.ini');
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      ini.Free;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
        Edit1.Text := OpenDialog1.FileName;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ini.WriteString('general','filename',Edit1.Text);
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      showmessage(ini.Readstring('general','filename',''));
    end;
      

  6.   

    俺试了你的程序,没有发现你说的问题。注意:如果你用了OpenDialog,那么你要到最后一次打开OpenDialog的路径下找sini.ini文件。因为ini := TiniFile.Create('.\sini.ini');是用的当前路径'.',而真正写入磁盘时,是在Ini.Free时(此时磁盘缓冲结束)。
      

  7.   

    lihuasoft(学习低调做人) 说的对。要用完整路径的ini文件。
      

  8.   

    谢谢lihuasoft和keyz,确实是路径的问题,一定要用绝对路径才可以。再次感谢。