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

Caml Discussion :

obtenir le chemin du fichier caml


Sujet :

Caml

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut obtenir le chemin du fichier caml
    Bonjour,

    J'essaie de créer un programme dans lequel j'ai besoin de manipuler des fichiers. Or j'aimerais que le programmer caml et les fichiers en questions puissent êtres déplacés. J'aimerais donc pouvoir dire à caml de lire le fichier "fichier.txt" et faire en sorte qu'il choisisse celui situé dans le dossier contenant "programme.ml" (le programme exécuté)
    J'ai essayé cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let abc = open_in_bin "fichier.txt"
    mais le programme recherche un fichier dans le dossier de wincaml (que j'utilise pour programmer) et non pas le même que celui du programme.

    Je voulais donc savoir s'il existait une fonction permettant d'obtenir le chemin du dossier contenant le programme que caml exécute (par exemple pour c:\\mon dossier\\divers\\programme.ml, qui renverrait la chaine "c:\\mon dossier\\divers\\") ou bien sinon, un fonction pour que caml tente directement d'ouvrir le fichier trouvé dans le même dossier que le fichier .ml que l'on exécute.

    Je vous remercie d'avance pour vos réponses.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let dir = (Filename.dirname (Sys.executable_name))
    et ensuite tu utilises la fonciton Filename.concat pour concaténer le répertoire et le nom du fichier de manière portable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Filename.concat dir filename)
    PS: malgré tout cela ne fonctionnera pas si tu exécutes ton programme en mode interprété (comme "ocaml programme.ml") car Sys.executable_name retourne alors le nom de l'interpréteur, auquel cas tu peux utiliser Sys.argv.(0) à la place

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    oui, mais ça ne fonctionne pas.

    La première commande renvoie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Sys.executable_name;;
    - : string = "C:\\Program Files\\Objective Caml\\bin\\ocaml.exe"
    Et pour la deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Sys.argv.(0);;
    - : string = "C:\\Program Files\\Objective Caml\\bin\\ocaml"
    Et non pas le répertoire contenant le fichier ml que j'envoie à caml.
    Est-t-on obligé de compiler le fichier ml avant de pouvoir ouvrir un fichier contenu dans le même répertoire ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    sous linux Sys.argv.(0) me renvoie le fichier .ml et non l'interpréteur, il s'agit donc d'une différence entre linux et ce que tu utillises

    le mieux se serait sans doute que tu donnes le chemin complet vers tes fichiers, ou bien que tu gères une liste de répertoire où ton programme cherchera les fichiers

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    oops en fait non, le code que tu nous donnes là est sous l'interpréteur interactif,
    dans ce cas là c'est normal que Sys.argv.(0) renvoie l'exécutable de l'interpréteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $ ocaml
            Objective Caml version 3.11.1
     
    # Sys.argv.(0) ;;
    - : string = "/usr/bin/ocaml"

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    OK, personnellement je suis sous Windows xp.

    Donc une fois que j'aurais compilé le programme, la commande me renverra ce qu'il faut ?
    Si c'est le cas alors ça fera l'affaire. Pendant la programmation je définirais le chemin que j'utilise puis je remplacerais par Sys.executable_name juste avant de compiler.

  7. #7
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Citation Envoyé par nicolas829
    Si c'est le cas alors ça fera l'affaire. Pendant la programmation je définirais le chemin que j'utilise puis je remplacerais par Sys.executable_name juste avant de compiler
    Pour ne pas t'embêter tu as Sys.interactive qui peut t'être utile.

    Cordialement,
    Cacophrène

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Cacophrene Voir le message
    Pour ne pas t'embêter tu as Sys.interactive qui peut t'être utile.
    Elle sert à quoi au juste cette commande ? Elle me renvoie un truc bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sys.interactive;;
     
    - : bool ref = {contents = true}

  9. #9
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Merci de lire le manuel :

    This reference is initially set to false in standalone programs and to true if the code is being executed under the interactive toplevel system ocaml.
    La valeur est initialement false si tu es en mode compilé (ocamlc ou ocamlopt), et true si tu es en mode interactif (toplevel ocaml).

    Cordialement,
    Eddy

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    D'accord, ça sera parfait.
    Je vous remercie tous les deux.

Discussions similaires

  1. Obtenir le chemin du fichier courant
    Par Pierre-Marie FAYOLLE dans le forum VBScript
    Réponses: 1
    Dernier message: 01/07/2009, 15h09
  2. Obtenir le chemin d'un fichier en lecture seul
    Par Duffyduff dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/05/2008, 17h46
  3. Obtenir le chemin par défaut pour les fichiers de données.
    Par Cpas2latarte dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/08/2007, 16h38
  4. Comment obtenir le chemin du fichier class ?
    Par Elbarto dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/11/2005, 10h37
  5. Obtenir le chemin complet d'un fichier
    Par pamplemousse_mk2 dans le forum Linux
    Réponses: 3
    Dernier message: 13/08/2003, 23h07

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