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

Turbo Pascal Discussion :

Répertoire courant et répertoire du programme [FAQ] [Turbo Pascal]


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut Répertoire courant et répertoire du programme
    Bonjour !

    Je cherche le code qu'il faudrait que j'ajoute à un programme pour obtenir le chemin du répertoire où se trouve le programme lui-même.
    Avec un autre compilateur que j'utilise (à savoir FreeBasic), si on ne précise pas de chemin, le chemin par défaut est celui du programme, ce qui est plutôt pratique. J'aimerais obtenir la même chose avec TP7.
    Or, pour le moment, si je ne précise pas de chemin, les fichiers s'enregistrent dans le dossier du compilateur. Et si je me sers de la fonction GetCurDir,

    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
    16
    17
    18
    19
    20
    {GetCurDr.PAS}
     
    {Sample code for the GetCurDir function.}
     
    { For Windows: }
    { uses WinDos, WinCrt; }
     
    uses WinDos;
     
    const
     CDrive:Byte = 3;
     
    var
     CurDir: PChar;
     
    begin
     GetMem(CurDir, 80);
     GetCurDir(CurDir, CDrive);
     Writeln('The current directory on drive c is ', CurDir,'.');
    end.
    la fonction me renvoie le chemin "c:\windows\system32", ce qui ne m'arrange pas.

    Je voudrais que mon programme puisse écrire des fichiers sans passer par un dialogue avec l'utilisateur et donc qu'il les écrive toujours "à côté" du fichier .pas ou .exe.

    Quelle est la façon la plus simple de faire cela ?


  2. #2
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    La valeur 0 pour le paramètre Unite de la fonction GetCurdir represente l'unité courante. Cela nous permet d'obtenir le répertoire courant.

    Pour le répertoire de l'exécutable, on peut utiliser :
    1. la fonction ParamStr avec l'indice 0
      Nous obtenons le chemin d'accès et le nom du fichier du programme en cours d'exécution.
    2. la fonction FileSplit pour en extraire le répertoire
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FSplit(ParamStr(0),DirName,FileName,ExtName); { DirName = répertoire de l'exécutable }

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Merci pour ta réponse. Ces deux fonctions sont bien utiles.

    Toutefois, si j'écris cette instruction :

    j'obtiens un résultat du genre

    \dossier1\dossier2\monprogramme.exe
    Il n'y a pas le "c:". Est-ce normal ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Finalement j'ai rajouté le "C:" !

    J'avais quelque scrupule mais j'ai vu la même chose dans des exemples de la FAQ, alors pour le moment je vais faire comme ça.



    Voici le code qui permet d'obtenir le chemin complet du programme (.exe). Avis et conseils bienvenus !

    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
    16
    17
    18
    19
    20
    Program Path;
     
    Uses Dos;
     
    Var
      P: PathStr;
      D: DirStr;
      N: NameStr;
      E: ExtStr;
     
    Begin
      P:='C:'+ParamStr(0);
      WriteLn('PathStr (chemin complet)=',P);
     
      FSplit(P,D,N,E);
     
      WriteLn('DirStr (r‚pertoire)=',D);
      WriteLn('NameStr (nom fichier)=',N);
      WriteLn('ExtStr (extension)=',E);
    End.
    Et voici une application amusante (enfin il me semble), un programme qui s'ouvre lui-même et affiche son code source :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Program Source; { Programme qui se "lit" lui-mˆme }
    Uses Dos, Crt;
     
    Var
      P: PathStr;
      D: DirStr;
      N: NameStr;
      E: ExtStr;
      t: Text;
      l: String;
     
    Begin
      P:='C:'+ParamStr(0);
      FSplit(P,D,N,E);
     
      Assign(t,D+'Source.pas');
      Reset(t);
      While not Eof(t) Do Begin
        ReadLn(t,l);
        WriteLn(l);
      End;
      Close(t);
      ReadKey;
    End.
    Attention ! Ne fonctionne

    1° que sur le disque C
    2° que si le fichier .pas et le fichier .exe sont au même endroit


  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut FExpand
    Pour obtenir la lettre qui représente le disque, et avoir ainsi un chemin complet ("un chemin d'accès absolu", dit l'aide de TP7), il faut utiliser la fonction FExpand().

    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
    16
    17
    18
    19
    20
    21
    Program Path;
     
    Uses Dos;
     
    Var
      P: PathStr;
      D: DirStr;
      N: NameStr;
      E: ExtStr;
     
    Begin
      {P:='C:'+ParamStr(0);}
      P:=FExpand(ParamStr(0));
     
      FSplit(P,D,N,E);
     
      WriteLn('PathStr (chemin complet)=',P);
      WriteLn('DirStr (r‚pertoire)=',D);
      WriteLn('NameStr (nom fichier)=',N);
      WriteLn('ExtStr (extension)=',E);
    End.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/04/2015, 00h38
  2. Réponses: 2
    Dernier message: 24/10/2007, 15h57
  3. [File] Problème de répertoire courant
    Par seb_asm dans le forum Applets
    Réponses: 5
    Dernier message: 03/05/2005, 19h44
  4. [JSP] Récupérer le répertoire courant
    Par dafly dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 10/06/2004, 11h01
  5. répertoire courant ".\"
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 10/03/2004, 09h57

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