ExtractFileDir(Application.ExeName)
----> o más simple aún, que encontré después de escribir esta entrada:
Application.Location <---
Ejemplo:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
elPath:String;
elPrograma:String;
begin
elPrograma:=Application.ExeName;
elPath:=TrimFilename(GetCurrentDir+PathDelim);
Memo1.Lines.Add('TrimFilename(GetCurrentDir+PathDelim+elPrograma) --> '+elPath);
elPath:=ExtractFileDir(Application.ExeName);
Memo1.Lines.Add('ExtractFileDir(Application.ExeName) --> '+elPath);
elPath:=ExtractFilePath(Application.ExeName);
Memo1.Lines.Add('ExtractFilePath(Application.ExeName) --> '+elPath);
end;
end.
El primero, es a lo bestia, y falla si no se ejecuta el programa desde su carpeta.
El segundo, ya utilizando Application.ExeName, no es que falle, sino que hace para lo que está programado, ExtractFileDir y no incluye la barra delimitadora o PathDelim.
Finalmente el tercero es el adecuado: ExtractFilePath que a diferencia del anterior, sí incuye la barra delimitadora.
Cabe destacar que ninguno en realidad falla, hablo de falla para lo que se busca, que es el path (completo).
Resultado ejecutando el programa desde la IDE Lazarus.
Resultado desde la carpeta del programa.
Resultado desde la carpeta programas.
Nota: la clase Application se ubica en la unidad Forms.
No hay comentarios:
Publicar un comentario