Chemin relatif ouverture PDF [Résolu]

- 7 mai 2013 à 10:53 - Dernière réponse :  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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 7 mai 2013 à 13:18
3
Merci
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

Merci Whismeril 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Whismeril
0
Merci
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.
Commenter la réponse de stuckly
0
Merci
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.
Commenter la réponse de stuckly
0
Merci
c'est bon fallait juste mettre |DataDirectory| à la place du répertoire.
Commenter la réponse de stuckly

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.