Delphi2010中的GetDir在Windows 7下不工作?

Delphi2010中的GetDir在Windows 7下不工作?,delphi,windows-7,delphi-2010,topendialog,opendialog,Delphi,Windows 7,Delphi 2010,Topendialog,Opendialog,在Delphi2010中,我有以下命令序列: var netdir:string; .... OpenDialog1.InitialDir:=netdir; .... OpenDialog1.Execute... .... GetDir(0,netdir); .... 在执行OpenDialog之后,我应该在我完成的目录中包含字符串netdir 我的OpenDialog.Execute。在下一个OpenDialog中,执行它应该从这个开始 目录 它可以在XP上正

在Delphi2010中,我有以下命令序列:

  var netdir:string;
  ....
  OpenDialog1.InitialDir:=netdir;
  ....
  OpenDialog1.Execute...
  ....
  GetDir(0,netdir);
  ....
在执行OpenDialog之后,我应该在我完成的目录中包含字符串netdir 我的OpenDialog.Execute。在下一个OpenDialog中,执行它应该从这个开始 目录 它可以在XP上正常工作,但在Windows7上不行? 它总是从安装程序的目录开始

你知道哪里不对吗

谢谢。

你的问题目前无法回答,因为它缺少几个关键细节

  • netdir
    是一个全局常量,还是它偶尔会超出范围
  • 您是否将
    netdir
    设置为
    OpenDialog1.Execute
    之前的值
  • 问题是关于返回什么目录
    GetDir
    return(如标题所示),还是关于如何使打开的对话框记住上次访问的目录(如正文所示)
  • 我假设1)
    netdir
    是一个全局常量,2)您最初没有设置它,3)您希望打开的对话框记住上次访问的文件夹。这样你就有了

    unit Unit3;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm3 = class(TForm)
        OpenDialog1: TOpenDialog;
        procedure FormClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form3: TForm3;
    
    var
      netdir: string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.InitialDir := netdir;
      OpenDialog1.Execute;
      GetDir(0, netdir);
    end;
    
    end.
    
    然后,解决方案是让Windows为您记住目录,也就是说,只需执行以下操作即可

    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.Execute;
    end;
    
    一个人!但是为什么你的方法不起作用呢?嗯,
    GetDir
    不会返回您想要的内容。如果您需要显式控制,请执行以下操作:

    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.InitialDir := netdir;
      OpenDialog1.Execute;
      netdir := ExtractFilePath(OpenDialog1.FileName)
    end;
    
    你的问题目前无法得到回答,因为它缺少几个关键细节

  • netdir
    是一个全局常量,还是它偶尔会超出范围
  • 您是否将
    netdir
    设置为
    OpenDialog1.Execute
    之前的值
  • 问题是关于返回什么目录
    GetDir
    return(如标题所示),还是关于如何使打开的对话框记住上次访问的目录(如正文所示)
  • 我假设1)
    netdir
    是一个全局常量,2)您最初没有设置它,3)您希望打开的对话框记住上次访问的文件夹。这样你就有了

    unit Unit3;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm3 = class(TForm)
        OpenDialog1: TOpenDialog;
        procedure FormClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form3: TForm3;
    
    var
      netdir: string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.InitialDir := netdir;
      OpenDialog1.Execute;
      GetDir(0, netdir);
    end;
    
    end.
    
    然后,解决方案是让Windows为您记住目录,也就是说,只需执行以下操作即可

    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.Execute;
    end;
    
    一个人!但是为什么你的方法不起作用呢?嗯,
    GetDir
    不会返回您想要的内容。如果您需要显式控制,请执行以下操作:

    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.InitialDir := netdir;
      OpenDialog1.Execute;
      netdir := ExtractFilePath(OpenDialog1.FileName)
    end;
    

    如果你不想打开对话框,你可以按照下面的步骤在你的程序下获取dir

    yourdir:=ExtractFilePath(Application.ExeName);
    

    我已经在Vista中完成了它,并且它工作正常。

    如果你不想打开Dialog,你可以按照下面的步骤在你的程序下获得dir

    yourdir:=ExtractFilePath(Application.ExeName);
    

    我已经在Vista中完成了这项工作,并且工作正常。

    这就是问题的解决方案

    openDialog1.Options := [ofFileMustExist];
    
    if openDialog1.Execute then
    begin
    
    end;
    

    这就是问题的解决办法

    openDialog1.Options := [ofFileMustExist];
    
    if openDialog1.Execute then
    begin
    
    end;