none
[WINFORM] Chemin vers un fichier de ressource - ResX RRS feed

  • Question

  • Bonjour à tous,

    Je suis actuellement en train de développer une application Winform pour un client. Cette application comprends parmi ses fonctions le fait de lire des fichiers PDF. En ce qui concerne le lecteur et l'affichage je n'ai aucun problème. En revanche lorsque j'exporte l'application sur un autre PC, les PDF ne s'ouvrent pas. Cela est dû à un problème de chemin.

    En effet, j'ai besoin du chemin du fichier pour pouvoir l'ouvrir et ne parviens à l'ouvrir avec un chemin relatif après installation sur une autre machine. J'ai tenté de passer par les ressources du Winform pour l'ouverture mais sans succès. Comment m'assurer de trouver les fichiers après publication et installation de l'application sur une autre machine ?

    Je vous remercie par avance !


    • Modifié Anbutsuchi mardi 30 septembre 2014 15:28 Fautes de relecture
    mardi 30 septembre 2014 15:25

Toutes les réponses

  • Bonjour,

    Où stockez vous les fichiers PDF ? Dans les fichiers ressources ? Dans le répertoire où est installé l'application ? Dans un autre répertoire ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mardi 30 septembre 2014 23:34
    Modérateur
  • Bonjour,

    J'ai tenté de stocker mes fichiers tout d'abord dans un dossier Ressources, ensuite de les intégrer dans le dossier de l’exécutable avant de finir par le dossier Ressources du Winform (à partir du .resx) !

    mercredi 1 octobre 2014 07:09
  • Bonjour,

    Lorsque vous dites "stocker les fichiers dans un dossier ressources", avez vous changer le "Copy to output Directory" pour embedder vos fichiers ?

     

    Cordialement

    Cédric

    mercredi 1 octobre 2014 07:40
  • Bonjour,

    Vous avez plusieurs façon de gérer l'accès à des ressources de fichiers.

    Globalement, soit vous les distribuez sous formes de fichiers, auquel cas ils seront vus par l’utilisateur dans le dossier concerné, ce qui peut vous poser un problème éventuel (ouverture manuelle, modification, déplacement, renommage...), soit vous les "empaquetez" dans votre exécutable.

    Dans la première option, si vous distribuez ces fichiers librement en plus de votre exécutable (donc dans votre environnement de développement dans bin\debug ou bin\release en fonction du statut de votre projet), vous accéder à cet emplacement avec la classe "Application" et la propriété "StartupPath". Donc, "Application.StartupPath" vous donne toujours le chemin où votre exécutable a été lancé.
    Si vous souhaitez utiliser un autre chemin défini par l'utilisateur, le mieux est sans doute d'interfacer pour ce dernier le choix de son dossier où se trouve les fichiers concernés et de stocker ce paramètre dans un fichier ini ou tout autre conteneur de paramètres (regsitre, base de données, etc...).

    Si vous souhaitez que ces fichiers soient incluent dans votre exécutable, n'oubliez pas dans un premier temps dans votre explorateur de solution Visual Studio de passer pour chaque fichier la propriété "Build Action" à "Embedded Resource". Cette propriété aura pour action d'empaqueter chaque fichier avec votre exécutable.
    Côté code, pour accéder à ces fichiers, vous devez alors utiliser la classe "Reflection" avec la méthode "GetManifestResourceStream" pour récupérer un stream sur la ressource de votre choix empaquetée dans l'exécutable.
    Si cette dernière option vous évite de distribuer vos fichiers de manière autonome, cela alourdi en revanche de manière potentiellement très conséquente le poids de votre exécutable et interdit tout accès manuel au fichiers pour une modification nécessaire sur un poste par exemple (nécessité de modifier le fichier, recompiler l’application et redistribuer).

    Cordialement.

    mercredi 1 octobre 2014 09:45
  • Bonjour,
    J'entends bien vos réponses et je vous remercie du temps que vous m'accorder.

    La seconde méthode me serait plus utile et sécurisée. Or pour ouvrir mes fichiers PDF dans mon application Winform j'utilise AxAcroPDFLib avec la fonction LoadFile() qui prend en paramètre une string correspondant au chemin du fichier. Puis-je obtenir ceci à partir du Stream ou je fais fausse route ?

    Cordialement,
    Pierre.

    mercredi 1 octobre 2014 11:36
  • Bonjour,

    Puis-je obtenir ceci à partir du Stream ou je fais fausse route ?
    Si vous obtez pour la 2ème solution, vous devrez d'extraire votre fichier dans un répertoire temporaire. Pour cela récupérer le Stream comme expliqué par Christophe et vous générer un fichier temporaire. Une fois le fichier généré utilisez le dans votre ActiveX AxAcroPDFLib. Bien évidemment, il faudra penser à supprimer le fichier lorsque l'utilisateur aura fermé votre fenêtre de visualisation...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 1 octobre 2014 22:39
    Modérateur