IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Delphi Rad Studio 12 - obtenir le chemin absolu du fichier principal de mon projet à l'execution


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Août 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 123
    Par défaut Delphi Rad Studio 12 - obtenir le chemin absolu du fichier principal de mon projet à l'execution
    Bonjour !
    S'il vous plait, serait-il possible d'avoir le chemin complet de mon fichier projet (monprojet.dproj) pendant la phase d'execution de mon proramme.

    merci d'avance de vos réponses.
    cordialement,
    Dibak

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 968
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 968
    Par défaut
    Sujet abordé ici.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Bonjour, je trouve la question ambiguë.

    S'agit-il de savoir où se situe le fichier .dproj qui est un fichier ouvert par l'IDE ou du fichier exécutable (comme l'indique la partie de phrase "la phase d'execution") ?
    Pour ce qui est du fichier .exe la réponse est déjà indiquée par Andnotor.


    Pour ce qui est du fichier dproj, tout d'abord cela ne ce pourrait que sur le poste de dévelloppement

    par code il faut donc faire un tripme ExtractFileDir à partir du nom complet de l'exécutable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var dirproj:=ExtractFileDir(ExtractFileDir(ExtractFileDir(application.exename)));
    MAIS en FMX, Application.exename n'existe pas il faut donc revenir au "classique" ParamStr(0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var dirproj:=ExtractFileDir(ExtractFileDir(ExtractFileDir(paramstr(0))));
    au niveau de l'EDI, une option dans la fenêtre projets permet d'afficher le chemin
    Nom : Capture.png
Affichages : 145
Taille : 40,4 Ko
    (première option du menu)
    NB.une autre option du menu contextuel, toujours dans cette fenêtre, permet de faire une copie en bloc-note de tout ou partie du chemin
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 968
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 968
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    par code il faut donc faire un triple ExtractFileDir à partir du nom complet de l'exécutable
    Uniquement si tu gardes la configuration de compilation par défaut.
    Dans mon cas par exemple les sources sont sur réseau mais les fichiers compilés (exe, dcu, etc.) sont en local en debug (pas besoin de backup).
    Et en release, les dcu toujours en local mais les modules (exe, dll, etc.) sur réseau.

    Note : tu n'as pas (re)lu mon intervention jusqu'au bout, $(PROJECTDIR) fait très bien le job (même si je ne sais toujours pas à quoi ça peut servir).

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    tu n'as pas (re)lu mon intervention jusqu'au bout, $(PROJECTDIR) fait très bien le job (même si je ne sais toujours pas à quoi ça peut servir).
    Mes excuses, le const dans la clause interface n'est pas forcément ma tasse de thé.
    Moi non plus, je ne vois pas trop le pourquoi de la demande
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Invité de passage
    Homme Profil pro
    ‫‬
    Inscrit en
    Août 2025
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : ‫‬

    Informations forums :
    Inscription : Août 2025
    Messages : 56
    Par défaut
    Il y a une vieille technique pour connaître le chemin d'un ficher source et par conséquent celle du projet c'est par l'utilisation de Assert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function SourcePath(): string;
    var
     Msg: string;
     P1, P2: integer;
    begin
      Msg := '';
      try
       {$C+} assert(False,'u');{$C-}
      except on e: exception do
         Msg := e.Message;
      end;
      P1 := Pos('(', Msg);
      P2 := Pos(',', Msg);
      Result  := ExtractFilePath(Copy(Msg, P1+1,P2 - P1-2));
    end;
    En effet il est possible d'améliorer le code sans déclencher l'assertion qui peut provoquer l’arrêt le programme lancé en mode débogage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure  AsserProc(const Message, Filename: string;
        LineNumber: Integer; ErrorAddr: Pointer);
    begin
        showmessage(Filename);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
       Old: TAssertErrorProc;
    begin
        Old := AssertErrorProc;
        AssertErrorProc := AsserProc;
        assert(False,'u');
        AssertErrorProc := Old;
    end;

  7. #7
    Membre confirmé
    Inscrit en
    Août 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 123
    Par défaut
    Salut chers tous,
    Merci beaucoup pour toutes vos réponses.
    je dois preciser qu'à la phase d'execution et à une étape du processus d'execution de mon programme, je dois copier (faire la copie) de tout mon répertoire (et sous répertoire) contenant mon projet (monprojet.dproj), vers une destination qui me sied car l'objet du projet l'exige.
    j'ai donc fait comme a dit Sergio Master <<faire un triple ExtractFileDir >> et ça marche.
    je suis sur windows. je me demande si sur mac ça serait toujours valable.

    cordialement,
    dibak

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par dibak Voir le message
    je suis sur windows. je me demande si sur mac ça serait toujours valable.
    Sérieusement ?
    Les sources du projet (.dproj inclus) sont des fichiers spécifique à Delphi et donc son IDE. Le dev Delphi n'étant que Windows (à ce jour) comment pouvez vous vous poser cette question ?

    On ne déploie jamais les sources , uniquement l'exécutable et ses dépendances
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    N'est-ce pas plutôt un boulot pour outil type FinalBuiler ou Jenkins pour automatiser une compilation, une mise en archive dans un zip, un commit + tag sur JEDI VCS* puis un Packaging ?
    On n'a un peu l'impression que c'est une sorte de packager votre programme pour archiver les sources, peut-être pour les livrer et les remettre à tiers (le client commanditaire peut-être)


    * Oui, tout ça un FB le faisait en JEDI VCS, ça donne l'idée à quel point ça date (D5, D6 et D7)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 464
    Par défaut
    Si c'est pour archiver les sources et les zipper, GExperts fait cela très bien avec plein de possibilités d'ajustement, dans sa fonction Backup.

    De plus les sources sont disponibles pour les adapter si besoin.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/04/2014, 14h34
  2. Delphi RAD Studio XE2 et XCode
    Par Valnor dans le forum EDI
    Réponses: 4
    Dernier message: 05/10/2011, 09h40
  3. Réponses: 6
    Dernier message: 29/07/2011, 13h24
  4. Delphi RAD Studio XE : Echec à l'authentification
    Par colorid dans le forum Langage
    Réponses: 1
    Dernier message: 15/07/2011, 11h43
  5. [Débutant] Fonction prédéfinie pour obtenir le chemin absolu d'un fichier ?
    Par Invité dans le forum MATLAB
    Réponses: 8
    Dernier message: 11/09/2010, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo