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

C# Discussion :

Récupérer path fichier python


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par défaut Récupérer path fichier python
    Bonjour,
    Je fais actuellement un projet pour mes études en dut informatique et dans celui ci, je créer une application en c#.
    Cette application c# gère des traces gps(kml,gpx) et j'ai un algo en python qui permet de rentre plus lisse et plus "jolie" cette trace.
    J’utilise IronPython pour exécuter mon script comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var script = @"F:\COURS_IUT/testPython.py";
                var source = engine.CreateScriptSourceFromFile(script);
    Je récupère mon script python en dur, je voudrais donc si possible que ce script soit récupérer automatiquement pour cela j'avais une théorie:
    lorsque je rends en exécutable mon projet que ça télécharger aussi mon script au même endroit que mon projet et donc il faudrait que je trouve un moyen de récupérer le path de mon projet et de le généraliser pour chaque utilisateur et enfin pouvoir récupérer mon script de cette endroit ?

    Merci bien

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Par défaut
    Bonjour,

    Tu peux utiliser les fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Récupère le path de la solution
                string slnPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
     
                //Récupère le répertoire de la solution
                string directoryPath = Path.GetDirectoryName(slnPath);

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string tonFichier = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\FOLDER\\FILE";

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Par défaut
    J'y ai pensé plus tard, tu peux aussi au démarrage demander à l'utilisateur de sélectionner l'emplacement du fichier python, stocker cette variable (chemin d'acces) dans un fichier de config (.config, .xml, .txt...) et la réutiliser à chaque réouverture de l'appli.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    using System.Windows.Forms;
     
    //Sélectionner un emplacement de dossier
    FolderBrowserDialog folderDialog = new FolderBrowserDialog();
    folderDialog.SelectedPath = "C:\\";
    folderDialog.ShowDialog();
    Console.WriteLine(folderDialog.SelectedPath);
     
    //Sélectionner un emplacement de fichier
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.InitialDirectory = "C:\\";
    dialog.ShowDialog();
    Console.WriteLine(dialog.FileName);

  4. #4
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Si ton script constitue une part fixe de ton application tu peux l'inclure comme ressource liée (ajoutée au dossier de publication pendant la compilation) ou ressource incorporée dans ton projet. Ainsi il sera toujours disponible soit dans le répertoire de publication pour une ressource, soit dans l'assembly lui-même pour une ressource incorporée.

    Mettons que tu aies un dossier scripts à la racine du projet, avec un fichier format.py.

    Pour une ressource liée tu peux t'appuyer sur le code de zeratec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var path = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "scripts", "format.py"));
    var script = File.ReadToEnd(path);
    Pour une ressource incorporée le contenu du fichier est directement contenu dans l'assembly et il faut procéder un peu différemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var assembly = Assembly.GetExecutingAssembly();
    var fileName = $"{assembly.GetName().Name}.scripts.format.py";
    using var stream = assembly.GetManifestResourceStream(fileName);
    using var reader = new StreamReader(stream);
    var content = reader.ReadToEnd();
    Ensuite tu peux spécifier son emplacement dans le fichier de configuration de l'application au cas où tu aurais besoin de le remplacer : tu vérifies si l'emplacement d'un fichier est défini dans la configuration et si ce n'est pas le cas tu reviens sur le script par défaut.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par défaut
    Merci beaucoup à vous deux et en effet je vais essayer de rendre ce script comme une ressource lié à mon application, il faudrait juste que quand je compile et que je créer réellement le .exe de mon projet que ça ajoute aussi le script avec et qu'ils soient lié en soit ce que je n'ai jamais fait je vais essayer de me pencher dessus.
    Il me reste une part d'ombre c'est la différence entre une ressource liée et une ressource incorporée ce n'est pas la même chose ? La ressource incorporée est une ressource ajoutée pas l’utilisateur ?

  6. #6
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Citation Envoyé par entwan07 Voir le message
    La ressource incorporée est une ressource ajoutée pas l’utilisateur ?
    C'est tout l'inverse justement.

    Dans les propriétés d'un fichier à ajouté à un projet il y a l'Action de génération (pour les fichiers de code source on sélectionne "Compilateur C#"). Pour des ressources on peut choisir "Ressource" (liée) ou "Ressource incorporée". Une ressource incorporée est inséré directement dans l'assembly produit, qu'il s'agisse d'une exécutable ou d'une dll. L'intérêt est la fiabilité puisqu'on l'on est certain que la ressource sera disponible au moment où l'assembly est utilisé et ça a du sens pour des ressources définitives ou des ressources par défaut. Par contre on ne peut plus la modifier, pour cela il faudrait recompiler l'assembly. Une ressource liée est simplement copiée au côté de l'assembly au moment de la compilation, il est possible de la supprimer ou de la remplacer, c'est utile pour un fichier de configuration ou des éléments qui peuvent avoir besoin d'être adaptés. À moins que tu n'aies des raison de vouloir modifier ton script après le déploiement une ressource incorporée ira très bien.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/05/2012, 16h20
  2. Hybride pour récupérer les docstrings d'un fichier Python
    Par rambc dans le forum Général Python
    Réponses: 4
    Dernier message: 07/09/2010, 21h58
  3. Récupérer des infos sur un fichier Python
    Par rambc dans le forum Général Python
    Réponses: 4
    Dernier message: 12/02/2009, 17h00
  4. Récupérer path fichier dans appli Web
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 16/05/2007, 10h31
  5. Récupérer Path d'un fichier
    Par ANISSS dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/02/2006, 12h09

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