Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB]Problème de chemins d'accès dans mon programme

Impossible de trouver une partie du chemin d'accès.

Sujet résolu
    23 septembre 2018 à 2:42:17

    Salut à toutes et à tous,

    J'ai réalisé un petit programme de gestion de stock.  J'ai crée un fichier PDF pour gérer les facture, et tout se passe comme voulu. En mode          De-bug pas de problème. Mais après la régénération et la publication, quand j'essaie de générer la facture j'obtiens une erreur indiquant que le fichier n'existe pas.

    Ma question: comment  puis-je intégrer le fichier au répertoire spécifier dans l'erreur?

    Erreur

    Impossible de trouver une partie du chemin d'accès.



    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2018 à 11:08:28

      Généralement, c'est plutôt le répertoire de travail qu'un utilise car les applications sont généralement installées dans des répertoires sans accès en écritures.

      Pouvez-vous nous donner un extrait du code qui ne fonctionne pas, avec le message d'erreur ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        25 septembre 2018 à 0:22:56

        bacelar a écrit:

        Généralement, c'est plutôt le répertoire de travail qu'un utilise car les applications sont généralement installées dans des répertoires sans accès en écritures.

        Pouvez-vous nous donner un extrait du code qui ne fonctionne pas, avec le message d'erreur ?

        Voilà la partie du code où j'essaie d'ouvrir le fichier, il sera créé s'il n'existe pas et écraser s'il existe:

        Dim PdfWrite As PdfWriter = PdfWriter.GetInstance(pdfDoc, New FileStream("dernierefacture.pdf", FileMode.Create))

        Et aussi le code essayant d'ouvrir le fichier comme pdf:

        Facture.AXACROPDF_FACTURE.LoadFile("Resources/dernierefacture.pdf")
        • Tout se passe bien en mode De-bug. Je ne sais pas pourquoi ça plante après la publication et l'installation ?
        • Et aussi j'avoue que je crée un fichier dans la racine portant le même nom "dernierefacture.pdf" , donc je veux savoir s'il y a de méthode pour l'intégrer dans l' exécutable.

        -
        Edité par Semo55 25 septembre 2018 à 0:25:04

        • Partager sur Facebook
        • Partager sur Twitter
          25 septembre 2018 à 12:16:52

          Dans votre code, vous utilisez des chemins relatifs et non absolu.

          Ces chemins sont toujours relatifs au répertoire de travail du processus.

          Le répertoire de travail est initialisé lors du chargement du programme et, sauf instruction contraire, est le même que le processus parent (le processus l'ayant lancé).

          Un processus peu toujours changer son répertoire de travail, dans les limites de ses droits d'exécution :

          https://docs.microsoft.com/de-de/dotnet/api/system.io.directory.setcurrentdirectory?redirectedfrom=MSDN&view=netframework-4.7.2#System_IO_Directory_SetCurrentDirectory_System_String_

          "Tout se passe bien" avec VS car VS fixe systématiquement le répertoire de travail à une valeur fixe (qui est fonction des propriétés du projet) quand vous lancez l'exécutable via VS. Les propriétés du projet par défaut ont été fixé pour simplifier la mise au point du programme.

          Mais, si votre application est sensible au répertoire de travail, par l'usage de chemin relatif, vous devez faire les actions nécessaires pour que ce répertoire de travail corresponde à vos attentes.

          Si votre problème n'est que d’accéder en lecture à des fichiers qui sont livrés avec votre applicatif, c'est de faire de votre répertoire applicatif le répertoire de travail avec le "SetCurrentDirectory" indiqué ci-avant et pour le répertoire de l'exécutable :

          https://stackoverflow.com/questions/837488/how-can-i-get-the-applications-path-in-a-net-console-application

          Pour ce qui est des fichiers à intégrer dans l'exécutable, c'est une très mauvaise idée. Moi, je vous conseille de faire une solution de déploiement qui créera un MSI qui contiendra tout ce qui vous est nécessaire et qui installera tous les fichiers selon une arborescence fixe.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            28 septembre 2018 à 0:28:27

            Merci BACELAR pour ta réponse.

            Je suis débutant, et voilà ce que je veux faire:

            - Mon petit programme génère des factures et les affiche sous forme de PDF.

            - Pour cela, je crée un fichier PDF dans la racine de l'exécutable,je l'ouvre en écriture et j'écris dedans. Avec VS ça marche bien.

            - J'ai besoin d'une manière pour mettre ce fichier dans le répertoire de l'exécution du programme pour pouvoir le modifier.

            - S'il n'est pas possible de modifier des fichiers dans ce cas, Est-ce que vous avez des idées pour atteindre ce but.

            Merci d'avance.

            • Partager sur Facebook
            • Partager sur Twitter
              28 septembre 2018 à 12:01:13

              Si vous faite un petit programme utilitaire sans mécanisme de déploiement ou de publication, vous pouvez peut-être faire l'assertion que vos utilisateurs savent lire une documentation (que vous devez vous palucher) et qu'ils ne s'offusqueront pas que votre programme salope le contenu d'un répertoire sans lui demander son avis, mais c'est limite.

              Pourquoi ne pas demander à l'utilisateur où le programme devra mettre ces fichiers PDF ?

              Sinon, pour des fichiers temporaires, c'est pas les répertoire dédié à cela qui manquent :

              https://docs.microsoft.com/en-us/dotnet/api/system.io.path.gettemppath?view=netframework-4.7.2

              etc...

              >Avec VS ça marche bien.

              Ça tombe en marche parce que VS fixe systématiquement le répertoire de travail à une valeur fixe pour le projet, pour simplifier le début de la mise au point du logiciel.

              Vous, à moins de lancer systématiquement votre logiciel via un launcher ou un raccourci qui font ce travail de modification du répertoire de travail, il vous faut soit n'utiliser que des chemins absolus (et c'est pas si compliqué, cf. mes précédent posts pour récupérer les chemins absolus des répertoires qui vous intéresse) soit vous fixez vous même, dans le code de votre application, le répertoire de travail :

              https://docs.microsoft.com/en-us/dotnet/api/system.io.directory.setcurrentdirectory?redirectedfrom=MSDN&view=netframework-4.7.2#System_IO_Directory_SetCurrentDirectory_System_String_

              J'ai l'impression que vous êtes allé bille en tête dans le développement sans prendre un peu de temps sur comment doit être conçu l'application en terme de fichier nécessaire en entré du processus (qui devrait être livrées avec l'exécutable, via un zip ou, de préférence dans un MSI) ; et de fichiers temporaire et de fichiers finaux qui ne doivent pas être mélangé.

              Ce que vous demandez est faisable mais est-ce vraiment souhaitable ???

              Donc, distinguez l'usage des différents fichiers et gérer leur emplacement en fonction de leur finalité.

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                5 octobre 2018 à 20:15:46

                Merci BACELAR pour ton aide.

                J'ai pu résoudre le problème de cette façon:

                Dim PdfWrite As PdfWriter = PdfWriter.GetInstance(pdfDoc, New FileStream(Application.StartupPath + "/facture.pdf", FileMode.OpenOrCreate))
                

                j'ai changé :

                - le mode d'écriture : FileMode.OpenOrCreate

                - le path d'écriture Application.StartupPath + "/facture.pdf"

                - le path de lecture aussi:

                Facture.AxAcroPDF_FACTURE.LoadFile(Application.StartupPath + "/facture.pdf")



                • Partager sur Facebook
                • Partager sur Twitter
                  8 octobre 2018 à 11:50:35

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                  [VB]Problème de chemins d'accès dans mon programme

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown