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

C# Discussion :

File.Delete avec une image


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut File.Delete avec une image
    Bonjour,

    Dans mon application je telecharge un fichier zip que je decompresse dans un repertoire temporaire. Je verifie qu'il ya un fichier excel dedans puis je dois supprimer ce repertoire temporaire. (bon le prog fera plus de truc par la suite mais pour l'instant je me contente de ca )

    Le probleme c'est que des que j'ai une image dans le zip je ne peux plus faire de delete.

    J'ai essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Directory.Delete(nomdurep,true);
    Et j'obtiens l'erreur:
    Le processus ne peut pas accéder au fichier 'CA13249.jpg', car il est en cours d'utilisation par un autre processus.
    Du coup, j'ai essaye de supprimer tous les fichiers contenu dans le rep avant de le supprimer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                    files = Directory.GetFileSystemEntries(monrep);
                    int filecount2 = files.GetUpperBound(0) + 1;
                    for (int i = 0; i < filecount2; i++)
                    {
                        File.Delete(files[i]);
                    }
    Et j'obtiens l'erreur:
    Le processus ne peut pas accéder au fichier 'CA13249.jpg', car il est en cours d'utilisation par un autre processus.
    Et ca a chaque fois pour la derniere image.
    Du coup je vois pas comment resoudre mon bug. :s

    Peut etre que ca vient du code de decompression que j'ai honteusement pompe???

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    public static void Decompresser(string cheminFichier)
        {
     
            string zip_file = cheminFichier;
            string rep = Path.GetDirectoryName(cheminFichier) + "\\" + Path.GetFileNameWithoutExtension(cheminFichier);
            ZipInputStream zip = null;
            ZipEntry zip_entry;
            FileStream stream = null;
            int nb;
            int nbm=0;
     
            try
            {
                nbm = 0;
                //un stream zip pour l'entrée zip
                zip = new ZipInputStream(new FileStream(zip_file, FileMode.Open, FileAccess.Read));
                //on crée le répertoire pour les fichier décompresser
                Directory.CreateDirectory(rep);
                //tant que il y a une entrée on continue,sinon on arrête
                while ((zip_entry = zip.GetNextEntry()) != null)
                {
                    try
                    {
     
                        //si  entrée zip_entry est un répértoire on crée le repertoire
                        if (zip_entry.IsDirectory)
                        {
                            Directory.CreateDirectory(rep + "\\" + zip_entry.Name);
     
                        }
                        //sinon : 
                        else
                        {
     
                            //on crée un stream pour l'écriture
     
                            stream = new FileStream(rep + "\\" + zip_entry.Name, FileMode.Create, FileAccess.Write);
                            //le conteur			
                            int count;
                            byte[] mem = new byte[10000];
                            //l'écriture
                            while ((count = zip.Read(mem, 0, 10000)) > 0)
                            {
                                stream.Write(mem, 0, count);
                            }
                        }
                        nbm++;
     
                    }
                    catch (Exception q)
                    {
                        continue;
                    }
     
                }
     
            }
     
            catch (Exception e)
            {
     
     
            }
     
            finally
            {
                if (stream != null) stream.Close();
                if (zip != null) zip.Close();
            }
     
            if (stream != null) stream.Close();
            if (zip != null) zip.Close();
            zip_entry = null;
            zip_file = null;
     
        }
    dans ce code l'auteur ferme bien ses streams et pour etre sur j'ai remis ces varialbes a null. Donc bref je vois pas comment resoudre mon probleme... SI quelqu'un a une idee?

    merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Par défaut
    Il y a en effet une erreur dans le code, tous les flux ne sont pas fermés, la clause finally ne fermant que le dernier.
    Il suffit d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ((count = zip.Read(mem, 0, 10000)) > 0)
    {
    stream.Write(mem, 0, count);
    }
    stream.Close();
    Il vaudrait mieux gérer l'exception à cet endroit.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    Merci sharpdev,

    C'etait effectivement ca.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/04/2007, 20h40
  2. Prob avec une image
    Par inferno66667 dans le forum Langage
    Réponses: 2
    Dernier message: 18/11/2005, 11h09
  3. problème pour faire un insert avec une image
    Par vbcasimir dans le forum Modules
    Réponses: 3
    Dernier message: 02/11/2005, 09h21
  4. [javascript] Scroll avec une image
    Par Salih-du-91 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/10/2005, 07h46
  5. Centrage de texte avec une image en arriere plan
    Par MasterOfChakhaL dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 26/08/2005, 18h31

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