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 Communication Foundation .NET Discussion :

Streaming: Problème de fermeture de fichier


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut Streaming: Problème de fermeture de fichier
    Bonjour,
    je réalise le téléchargement d'un fichier du service vers le client. Mon problème est que si je relance un deuxième téléchargement du MEME fichier, l'application me renvoie cette erreur:
    "The process cannot access the file Chemin du fichier' because it is being used by another process."
    Ce qui semble signifier que, quelque part dans mon code je ne libère pas le fichier (j'ai essayé d'ouvrir le fichier à partir de l'explorateur et effectivement il est utilisé par une autre application). Le problème est que je ne vois pas d'où cela vient.
    Voici mon code côté service:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public MessageFile  DonneFichierRapport(NomFichier nomFichier)
        {
            FileInfo finfo = new FileInfo(nomFichier.FileName);
            FileStream fstream = new FileStream(finfo.FullName, FileMode.Open);
            MessageFile mfile = new MessageFile(finfo.Name, finfo.Length, fstream);
            return mfile;
        }
    Simple envoie de fichier en fonction du nom passé en paramètre.
    Côté client:
    Code c# : 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
    mfile = _impressionEdition.DonneFichierRapport(nomFichier);
                sourceStream = mfile.DataFile;
     
                string uploadFolder = String.Format("{0}{1}\\{2}", AppDomain.CurrentDomain.BaseDirectory
                                                    , ConfigurationSettings.AppSettings["UploadDirectory"]
                                                    , mfile.FileName);
     
                using (destinationStream = new FileStream(uploadFolder, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    const int bufferLen = 8192;
                    byte[] buffer = new byte[bufferLen];
                    int count = 0;
                    while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
                    {
                        destinationStream.Write(buffer, 0, count);
                    }
                    sourceStream.Close();
                }

    Merci d'avance pour votre aide!!!!!

  2. #2
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Jette un coup d'oeil à File.Open(String, FileMode, FileAccess, FileShare).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut
    J'ai modifié mon code pour utiliser File.Open() et cela fonctionne parfaitement (en utilisant les bons paramètres bien évidement).

    j'ai remplacé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileStream fstream = new FileStream(finfo.FullName, FileMode.Open);
    par celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileStream fstream = File.Open(finfo.FullName, FileMode.Open, FileAccess.Read, FileShare.Read);
    et le tour est joué!!!!!!

    Merci l'ami

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Par défaut
    Bonjour,

    Je viens de tomber sur ce post en cherchant une réponse à ce même problème (à savoir les fichiers sont toujours lockés après un download via WCF-streaming).

    Cette solution est intéressante, elle résoud en effet le problème du lock.

    Par contre, est-ce qu'on ne va pas se retrouver avec tout un paquet de handles ouverts sur le fichier? Parce que si les streams sont laissés ouvert par un File.Open standard, je me demande qui les ferme en spécifiant un FileShare.Read?

    Merci pour vos idées!

    Matthieu

    P.S. Pour ceux que ça intéresserait, j'ai trouvé sur le net un post qui propose de résoudre le problème de la manière suivante:
    1) Garder une liste des streams ouverts côté serveur.
    2) Après le download, appeler une 2e méthode sur le serveur pour fermer le stream.

    Fonctionnel aussi, mais un peu bricolage quand même...

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

Discussions similaires

  1. Problème de fermeture de fichier
    Par Zhebulon dans le forum Général Python
    Réponses: 4
    Dernier message: 26/05/2010, 13h41
  2. Problème de fermeture de fichier
    Par babybell dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/12/2009, 08h12
  3. [Object REXX] Problème de fermeture de fichiers
    Par Tinfolley dans le forum Autres langages
    Réponses: 0
    Dernier message: 23/04/2008, 10h28
  4. [Perl] Problème de fermeture de fichier oO
    Par PlazaDel62 dans le forum Langage
    Réponses: 0
    Dernier message: 16/04/2008, 17h16
  5. Problème de fermeture de fichier CloseHandle
    Par bubulemaster dans le forum Delphi
    Réponses: 5
    Dernier message: 27/07/2007, 14h51

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