Chemin relatif ouverture PDF

Résolu
stuckly - 7 mai 2013 à 10:53
 stuckly - 16 mai 2013 à 16:43
Bonjour à tous,

Je suis en train de réaliser une application reliée à une base de données SQLServer Compact.

Mon application consiste globalement à gérer des produits de différentes catégories enregistrées en base de données.

Je dispose de fichier PDF (pour chaque produit), ainsi je propose à l'utilisateur un bouton afin d'ouvrir ce PDF.
Voici comment je m'y prends.

System.Diagnostics.Process.Start(Application.StartupPath+this.monProduit.getTechnique());


Produit est une classe regroupant les différentes informations du produit (récupérées depuis la base) notamment ce qui nous intéresse ici le getTechnique() renvoyant une chaine de caractères de ce style: \\Technique\\Independants\\Sauteuse SBX\\nomProduit.pdf

Je me suis ainsi inspiré des différents topics que j'ai pu trouver sur le net afin de faire un chemin relatif car mon application doit être portable (je récupère le chemin de l'exécutable auquel je concatène le chemin relatif de mon fichier (information enregistrée dans ma BDD).

ça marche parfaitement.

Mais il y à un truc qui me chagrine un peu
Je suis obligé de mettre un partie du chemin dans ma BDD, à la base je ne comptais ne mettre que le nom du PDF mais je ne sais pas comment m'y prendre.

C'est pourquoi je viens demander est-ce que quelqu'un saurait comment optimiser ma solution (dans un but de portabilité) ?

Merci d'avance pour le temps que vous m'accorderez.

4 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
7 mai 2013 à 13:18
Bonjour,

tout d'abord une astuce pour ne pas s'embeter avec les \\ dans les adresses est de mettre @ devant.
Par défaut un chemin est en relatif par rapport à l'adresse de l'excutable donc Application.StartupPath+ est normalement inutile. Ceci devrait marcher
System.Diagnostics.Process.Start(this.monProduit.getTechnique());

avec
getTechnique = @"Technique\Independants\Sauteuse SBX\nomProduit.pdf";// pas de \ au début


Pour ne pas avoir à stocker un chemin aussi long, je ne vois que 2 solutions:
soit mettre tous les pdf dans le mêmme dossier et avoir l'adresse en dur dans le code (ça risque d'être un peu le bazard si tu cherches un pdf à la main....)
soit faire une recherche sur le nom de fichier (temps d'exécution augmenté...), exemple dans cette discussion
Dans les 2 cas tes pdf doivent avoir un nom unique.



Whismeril
3
Merci pour ta réponse rapide .

Pour le
System.Diagnostics.Process.Start(this.monProduit.getTechnique());


ça plante. Mais ça n'est pas grave, vu que ma solution marche (même si l'appel d'une méthode alourdit forcément le code).

Pour tes solutions apportées je te remercie encore une fois.
Pour la première non je désire avoir des dossiers bien spécifiques par produit.
Pour la recherche pour le nom je vais étudier ça très attentivement Merci.
0
Re bonjour à tous.

Je reviens vers vous pour une question similaire.

Cette fois ci ça concerne ma base de données.

J'ai un fichier .sdf

Mon application doit être portable et ainsi pouvoir fonctionner sous n'importe quel PC (windows) c'est primordial.

J'ai donc une erreur lorsque je ne suis pas sur mon pc. Mon appli est en effet incapable de retrouver le fichier .sdf.

Il me faut donc pouvoir le retrouver sur n'importe quel pc et ainsi j'ai pensé à créer un chemin relatif dans les configurations :

[global::System.Configuration.DefaultSettingValueAttribute("Data Source=(LocalDB)\\v11.0;AttachDbFilename=""+ Application.StartupPath +
            "\\DataBaseBonnet.mdf";Integrated Security=True")]


mais ça ne plait pas au compilateur.

http://stackoverflow.com/questions/6009023/system-configuration-defaultsettingvalueattribute

Merci , je cherche aussi de mon côté une solution.
0
c'est bon fallait juste mettre |DataDirectory| à la place du répertoire.
0
Rejoignez-nous