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

Windows Forms Discussion :

C# : liberer l'utilisation d'un fichier


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 19
    Points
    19
    Par défaut C# : liberer l'utilisation d'un fichier
    Bonjour,

    Je travaille sur une application où une des taches est de générer un rapport PDF et dieu merci j'ai réalisé cette tache alors quand je génére ce PDF normalement l'utilisateur a le droit de continuer à travailler dans l'application MAIS le probléme qui se pose c'est que je peux pas ouvrir le PDF généré hors l'application ( Windows - Adobe Reader ) car on me dit qu'une autre application utilise ce fichier ( mon application ) et si je veux l'ouvrir il faut quitter l'application .
    Bref, l'utilisateur veut ouvrir le fichier PDF généré par l'application, mais mon application utilise toujours le PDF malgé que j'ai fermé le formulaire qui a généré ce fichier PDF
    Si jamais vous pouvez m'aider à régler ce probléme soit de connaitre le processus qui est lancé ou bien je sais si jamais le formulaire n'a pas été bien fermé .

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il faut fermer le fichier explicitement
    Fais voir ton code qui génère le fichier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    Merci pour votre réponse, ben voilà la fonction ( traitement qui gére l'exportation du fichier PDF )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        private void Exporter_PDF()
            {
     
                string deviceInfo =
             "<DeviceInfo>" +
             "  <OutputFormat>EMF</OutputFormat>" +
             "  <PageWidth>8.5in</PageWidth>" +
             "  <PageHeight>11in</PageHeight>" +
             "  <MarginTop>0.25in</MarginTop>" +
             "  <MarginLeft>0.25in</MarginLeft>" +
             "  <MarginRight>0.25in</MarginRight>" +
             "  <MarginBottom>0.25in</MarginBottom>" +
             "</DeviceInfo>";
                Warning[] warnings;
                m_streams = new List<Stream>();
                reportViewer1.LocalReport.Render("PDF", deviceInfo, CreateStream, out warnings);
     
                foreach (Stream stream in m_streams)
                    stream.Position = 0;
     
                            MessageBox.Show(" Votre Fichier a été exporter avec succès !", "Exportation du Rapport", MessageBoxButtons.OK, MessageBoxIcon.Information);
                  }

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Le code que tu as posté ne contient pas tous les éléments nécessaires pour identifier le problème... fais voir la méthode CreateStream, je pense que c'est là que ça se passe

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Voilà le code de la fonction CreateStream :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
          private Stream CreateStream(string name, string fileNameExtension,
         Encoding encoding, string mimeType, bool willSeek)
            {
                Stream stream = new FileStream(name + "." + fileNameExtension,
                  FileMode.Create);
    // name  : donne  le nom du rapport
    // fileNameExtension : donne PDF 
                m_streams.Add(stream);
                return stream;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    //m_streams est un tableau de stream 
    //voilà sa définition 
    private IList<Stream> m_streams;
    NB : si jamais aprés la génération du rapport PDF, j'essaie de générer un autre rapport ça me donne une erreur sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Stream stream = new FileStream(name + date + "." + fileNameExtension,
                  FileMode.Create);
    L'erreur dit :
    Le processus ne peut pas accéder au fichier , car il est en cours d'utilisation par un autre processus.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    OK, bah il faut juste que tu fermes les Stream après génération :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach (Stream stream in m_streams)
        stream.Close();
    Pourquoi tu utilises une liste d'ailleurs ? Il y a des cas où tu génères plusieurs fichiers à la fois ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Ben non je génére seulement un seul PDF à la fois, j'ai trouvé ce code sur internet et j'ai n'hésite à le modifier

    MERCI BEAUCOUP Votre solution marche trés bien ^^
    Mais ça reste un petit probléme c'est que je copie le fichier générer mais ça me donne une erreur :
    Le client ne dispose pas d’un privilège nécessaire

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par evil05 Voir le message
    Mais ça reste un petit probléme c'est que je copie le fichier générer mais ça me donne une erreur : " Le client ne dispose pas d’un privilège nécessaire. "
    Ca c'est une autre histoire... tu essaies probablement de copier le fichier vers un répertoire où tu n'as pas accès en écriture. Où essaies-tu de le copier ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Voilà il fallait fermer les Filestream que j'ai créer avec la fonction close.
    Mercii camarade


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       foreach (Stream stream in m_streams)
                    stream.Close();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/06/2006, 11h53
  2. Réponses: 18
    Dernier message: 31/05/2006, 17h48
  3. utilisation d'un fichier log
    Par portu dans le forum Windows
    Réponses: 3
    Dernier message: 16/09/2004, 10h34
  4. [struts] utilisation de plusieurs fichiers de config
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 25/03/2004, 10h04
  5. utiliser le même fichier dans plusieurs projets vc++6
    Par yannick_sch dans le forum MFC
    Réponses: 5
    Dernier message: 12/02/2004, 17h39

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