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 :

Supprimer des fichiers dans une archive


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 42
    Points : 51
    Points
    51
    Par défaut Supprimer des fichiers dans une archive
    Bonjour,

    J'aimerais faire un logiciel en C# WPF qui permettrait de selectionner un fichier ZIP puis d'effectuer un traitement, de supprimer tout les fichiers d'un type dans cette archive ou de supprimer un fichier spécifique qui se trouve toujours au même endroit dans l'archive.

    J'ai essayer de le faire avec DotNetZIP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach (var item in lbFiles.Items)
                {
                    ZipFile Original = new ZipFile(item.ToString());
                    ZipFile ZIPCleaned = new ZipFile();
                    ZIPCleaned.Save(item.ToString());
                    ZIPCleaned.RemoveEntry("DOSSIER/");
                    ZIPCleaned.RemoveEntry("dossierTest\\fichier.txt");
                    ZIPCleaned.RemoveEntry("dossierTest\\*.txt");
                }
    Mais ce code ne marche pas

    Avez vous une idée ?

    Merci d'avance

  2. #2
    Nouveau membre du Club Avatar de MINDONGO
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Informaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 31
    Points : 39
    Points
    39
    Par défaut
    ça ne donne pas c'est vague. as-tu un message d'erreur ou au niveau de la requête rien ne se faisait

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    Alors pour être plus précis, sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZIPCleaned.RemoveEntry("Dossier/");
    j'ai le message d'erreur suivant : "System.ArgumentException*: 'The entry you specified was not found in the zip archive.'" alors que le dossier que je souhaite supprimé existe bien dans l'archive


    j'ai aussi le meme message d'erreur pour la ligne de code suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZIPCleaned.RemoveEntry("dossier1//fichier.txt");
    sachant que j'ai bien dans l'archive un dossier nommé dossier1 qui contient un fichier fichier.txt.

    après peut être que dotNetZIP n'est pas adapté a ce que je souhaite faire.
    Si vous avez d'autres idée de logiciel cmplèmentaire a utilisé en c# pour faire ça dites moi

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 366
    Points
    5 366
    Par défaut
    Tel que c'est fait, ZIPCleaned est une nouvelle archive.
    Elle est donc vide et ça va être compliqué d'y retirer quelque chose.

    Si tu veux supprimer des éléments, il faut le faire sur une archive qui contient quelque chose.
    Par exemple sur Original

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    Ah oui oops,

    avec quelque chose comme ça après l'affectation d'Orignal ça sera mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZipFile ZIPCleaned = Original;
    Du coup maintenant la suppression d'un fichier spécifique fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZIPCleaned.RemoveEntry("dossierTest\\fichier.txt");
    Maintenant j'aimerais réussir a faire marcher la suppression de dossier et la suppression de type de fichiers soit ces lignes la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ZIPCleaned.RemoveEntry("DOSSIER/");
    ZIPCleaned.RemoveEntry("dossierTest//*.txt");
    Pour la première ligne je n'ai pas de message d'erreur mais l'application ne crash pas par contre avec un try catch je retrouve cette erreur The entry you specified was not found in the zip archive.
    Pour la deuxième ligne j'ai la même erreur qu'avant soit : System.ArgumentException*: 'The entry you specified was not found in the zip archive.'


    des idées ?

  6. #6
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Il faut essayer de comprendre un minimum le fonctionnement des outils que cherche à utiliser.

    Les bases :
    Un objet ZipFile est une collection de ZipEntry.
    Quand tu fais ZIPCleaned.RemoveEntry("dossierTest\\fichier.txt"), tu essaye de supprimer un ZipEntry (comme le nom de la méthode l'indique), la chaine de caractère étant transformé en ZipEntry.
    Qu'est-ce qu'un ZipEntry, c'est, pour simplifié, un objet avec un nom de fichier et une partie de son chemin.

    Bref, tout ça pour dire que quand tu fais ZIPCleaned.RemoveEntry("dossierTest\\fichier.txt"), ça fonctionne car il arrive à transformer "dossierTest\\fichier.txt" en ZipEntry.
    Par contre quand tu fais ZIPCleaned.RemoveEntry("DOSSIER/"), il ne fait rien car il n'y a pas de nom de fichier et avec ZIPCleaned.RemoveEntry("dossierTest//*.txt"), où as-tu vu que RemoveEntry acceptait des patterns ?
    En gros il essaye de supprimer le fichier *.txt qui bien sur n'existe pas, d'où ton message d'erreur.

    Tout ça pour dire que cette méthode n'est pas prévue pour supprimer un 'dossier' ou une liste de fichiers. Si tu veux de tel fonctionnalités, a toi de te les faire (et/ou de chercher dans la lib si ça existe, je n'ai pas tout fouillé pour ma part).

    Lien vers la lib : https://archive.codeplex.com/?p=dotnetzip
    Un fork sur GitHub : https://github.com/eropple/dotnetzip

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    merci au final j'ai réussi a supprimer un dossier avec removeEntry("DOSSIER") mais il fallait vider le dossier avant
    J'ai aussi réussi supprimer tout les fichiers d'un type, ce que j'ai fait c'est que j'ai parcourus l'archive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (ZipEntry z in ZIPCleaned.Entries)
    dans le foreach j'ai ajouter a une liste tout les fichiers qui se terminaient par *.txt puis j'ai parcouru la liste des fichiers trouvés pour les supprimés un a un

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

Discussions similaires

  1. Fonction pour lire des fichiers dans une archive MPQ
    Par MegaBigBoss dans le forum Débuter
    Réponses: 0
    Dernier message: 28/01/2012, 22h02
  2. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15
  3. Supprimer des éléments dans une TreeView ?
    Par souch dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/09/2005, 12h20
  4. Interet de mettre des fichiers dans une base de donnée
    Par Oberown dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 04/07/2005, 11h35
  5. [C#] [WinForms] Lecture d'un fichier dans une archive ZIP
    Par aegypius dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/12/2004, 17h15

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