Retour au répertoire racine de Delphi exécutable

J'ai un Delphi application d'exécution et lorsque j'appelle GetCurrentDir la suivante retourne:

C:\dev\w32\2015\BCSLBDemo\Win32\Debug

Quand je l'appelle ExtractFileDir(GetCurrentDir()) j'ai le message suivant:

C:\dev\w32\2015\BCSLBDemo\Win32

Ce que je désire est C:\dev\w32\2015\BCSLBDemo

function RetRoot: string;
var
  i: Integer;
  buf: string;
begin
  Result := '';
  buf := ExtractFileDir(GetCurrentDir());
  i := Length(buf);
  repeat
    dec(i);
  until (buf[i] = '\') or (i < 3);
  if buf[i] = '\' then
  begin
    Delete(buf, i, Length(buf));
    Result := buf;
  end;
end;

J'ai écrit cette fonction pour obtenir le résultat souhaité. Je voudrais savoir si il y a une meilleure approche pour accomplir récupérer le répertoire racine d'un Delphi exécutable.

  • Je suppose que vous devez définir ce que vous entendez par le répertoire racine d'un Delphi exécutable. Supposons que vous copiez l'exécutable dans un dossier dans le répertoire program files, comme vous le feriez si vous l'avez installé. Quel serait le répertoire racine. FWIW, le répertoire courant est seulement une coïncidence le même répertoire que l'exécutable est dans. Il n'a pas à être. Votre traitement de texte de code est très inutile. Vous pouvez supprimer tous les et de le remplacer avec la norme des appels de fonction.
  • Donc, vous pouvez écrire ExtractFileDir(ParamStr(0)) pour obtenir le répertoire contenant l'exécutable. Et à l'étape deux répertoires ExtractFileDir(ExtractFileDir(ExtractFileDir(ParamStr(0)))). Mais pourquoi voulez-vous à l'étape deux répertoires? Qui semble plaine bizarre. Si vous voulez mieux vous aider, alors vous devez expliquer ce que vous allez faire avec cette information.
  • David, je crois que je sais comment faire ces choses. Votre réponse a été exceptionnelle. Je n'ai pas eu le temps de regarder dans votre offre ce en raison du feu incessant des appels. Où est la documentation expliquant les choses que vous mentionnez? Merci Arch
  • "C:\dev\w32\2015\BCSLBDemo\Win32\Debug ... Ce que je désire est C:\dev\w32\2015\BCSLBDemo" - pourquoi? BCSLBDemo est votre racine du projet, pas votre exécutable racine. Votre executable est en cours d'exécution à partir de la Win32\Debug dossier, parce que c'est là le le projet est configuré pour envoyer le fichier exécutable qu'il crée. Le executable n'a pas de notion de le projet. Si ce que vous essayez d'accomplir en ayant la executable de trouver le le projet root? Qu'est ce qu'il va faire avec ce chemin?
  • J'ai besoin d'un emplacement pour charger un contrôle à partir d'un fichier texte. Lorsque je place le zip sur Embarcadero Code de la Centrale je n'ai jamais inclure le 32 bits, ni le 64 bit exécutable répertoires. Donc ce fichier texte a besoin d'une maison autre que l'exécutable de la racine. Les Options sont ensuite mis à disposition de la mise à jour de ce fichier texte. Cette approche élimine le besoin de recompiler l'application pour des raisons de modification de contenu.
  • Vous avez obtenu la mauvaise solution dans ce cas. Choix possibles serait le même répertoire que l'exécutable, ou un sous-répertoire de l'application données ou de programme, dossiers de données.
  • Il n'y a pas une telle chose comme "répertoire racine d'un Delphi exécutable". Votre choix dir est ..\..

InformationsquelleAutor Arch Brooks | 2015-09-30