ZIPPER UN REPERTOIRE EN CONSERVANT LA HIERARCHIE DES DOSSIERS

ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010 - 19 févr. 2005 à 13:40
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009 - 8 avril 2008 à 10:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29601-zipper-un-repertoire-en-conservant-la-hierarchie-des-dossiers

wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
8 avril 2008 à 10:18
Merci ^^

Et merci à tous pour votre aide !

A bientôt je pense ... :D
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 avril 2008 à 10:09
"pour ta défense" ... bon, tu t'es aperçu de la bourde, certes, mais copier-coller ne dispense pas (la preuve) de relire, comprendre, absorber...

^^

bonne continuation
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
8 avril 2008 à 10:04
Problème résolu, voici la solution :

byte[] Buffer = new byte[Convert.ToInt32(FileSize)];
MyFileStream.Read(Buffer, 0, Convert.ToInt32(FileSize-1));

C'est de la prog de base : on déclare un tableau de N case qui débute de 0 à N - 1 (en index). Donc forcement, si je déclare un tableau de FileSize-1 çà va pas le faire et du coup l'archive était corrompue par la taille...

Pour ma défense, je tiens à signaler que c'est un bout de code que j'avais récup du net :D
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
8 avril 2008 à 09:14
Merci pour les tuyaux ;)

J'ai réussi à m'en sortir, en mettant la propriété de l'update panel UpdateMode="Conditional"
et je le met à jour uniquement lorsque je clique à certains endroit.

Maintenant, du coup je peux modifier la response de mon update panel mais je suis confronter à un autre problème :

le fichier .zip généré est correcte lorsque je l'ouvre depuis la source physique (soit localement soit sur le serveur). Cependant, lorsque je le transmet via le Header de mon response l'archive est corrompue !!! Voici mon code :

private void TransmitFile(string path, string file)
{
Response.Clear();
FileStream MyFileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
long FileSize = MyFileStream.Length;
byte[] Buffer = new byte[Convert.ToInt32(FileSize - 1)];
MyFileStream.Read(Buffer, 0, Convert.ToInt32(FileSize - 1));
MyFileStream.Close();
Response.BufferOutput = true;
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Length", Buffer.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + file);
Response.AddHeader("Content-Transfer-Encoding","binary");
Response.ContentType = "application/octet-stream";

Response.BinaryWrite(Buffer);
Response.Flush();

}

Une idée ? Merci
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 avril 2008 à 01:40
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
7 avril 2008 à 10:19
Alors voilà ce que j'ai trouvé sur le net :

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.TransmitFile(path);
ftp.Get(Response.OutputStream, (Server.MapPath("temp/") + fileName));

Tout cela passe correctement en mode débuggage.
Malheureusement, après j'ai une belle erreur PageRequestManagerParseErrorException.

" The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.
Details : error parsing near 'PKCarréCarré-' "

Je n'y comprend strictement rien ! J'utilise un UpdatePanel, cela vient peut être de la ???

Help ...
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
5 avril 2008 à 10:04
J'ai déjà mis ces lignes de codes mais sans le " Ensuite faut envoyer le zip dans le stream de la réponse.".

Comment se traduit cette phrase en C# ?
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
5 avril 2008 à 01:39
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=pouet.pdf");

Et je crois qu'on peut aussi faire un
Response.AddHeader("Content-Length", 1000); // avec la bonne taille du fichier

Ensuite faut envoyer le zip dans le stream de la réponse.
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
4 avril 2008 à 14:39
Okay ^^ merci tout de même pour le coup de pouce ;)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 avril 2008 à 14:38
pour sur, ca change tout ^^
ok, donc faut provoquer un téléchargement.... je connais pas en détail, faut qu'un .Netiens Web passes dans le coin
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
4 avril 2008 à 14:34
Ok, je viens de comprendre pourquoi : je travail sur un projet Web Application et non Windows Application ... C'est vrai que j'avais oublié de préciser que je travaillais sur un site web.

Cela change quelque chose à la donne ?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 avril 2008 à 14:32
étrange, peut etre est-ce masqué...

Bouton droit dans cette boite a outils > Choisir les elements > SafeFileDialog
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
4 avril 2008 à 14:21
J'ai VS2k5 également : pas de trace de "SaveFileDialog" dans ma "ToolBox"...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 avril 2008 à 12:20
Si tu travailles dessus, tu n'as qu'a regarder, c'est plus simple, non ?

là, je viens de lancer VB2005
j'affiche ma Boîte a outils
j'ouvre "Boîtes de dialogue"
je vois bel et bien "SaveFileDialog"
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
4 avril 2008 à 12:16
Cette classe est-elle disponible sous le framework 2.0 ? Car je travail dessus.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 avril 2008 à 12:09
c'est un SaveFileDialog je crois, sous .Net
wlad952 Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 mars 2009
4 avril 2008 à 11:40
Merci pour ce code qui fonctionne très bien !

Cependant, je recherche un moyen, de proposer à l'utilisateur où il souhaite stocker son fichier une fois zippé (tout comme Word lorsqu'on clique sur "Sauvegarder sous").

Pourriez vous m'aider ?

Merci
cs_GeorgesDeLajungle Messages postés 29 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 22 juin 2007 1
5 avril 2006 à 10:14
Afin de créer des archives en conservant l'arborescences des dossiers on peut aussi utiliser la fonction intégrée à la dll : FastZip
on déclare

Dim zippage As New icsharpcode.SharpZipLib.Zip.FastZip
zippage.createemptydirectories = True
zippage.CreateZip(nomcompletfichierzip,nomrepertoire,True,"","")

Voila voila ...;)
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
23 févr. 2005 à 14:53
ouais je suis d'accord que la source manque de commentaire, j'ai fait ca vite fait comme je l'ai dit, et j'ai pas chercher à optimiser le truc.

Pour le problème du handles, oui on peut croire qu'il y a un problème, mais en fait, j'ai fait cette source, dans une appli web, en code inline, donc j'ai pas besoin de mettre le handle, j'appelle la fonction dans le code html.

Pour la variable isError, oui c'est bien un string, et non un boolean, j'avoue que le nom de la variable est mal choisi, mais elle a du changer de type entre temps :p

Sinon oui c'est un code crade, mais j'ai pas cherché à optimiser le truc, si quelqu'un a une version optimisé et en application winforms plus commentaire, je met à jour la source :)

JE rajouterais des commentaires à l'occase ...
cs_Benouille Messages postés 215 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 7 septembre 2007
23 févr. 2005 à 13:01
manque de commentaires pour moi (ou alors c'est trop compliqué pour mes petits yeux mais bon)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim isError As String

y a pas de handle?
pourquoi iserror as string?
deja iserror fait plus penser a un bouléen et puis pourquoi le stocker dans une string, l'objet erreur et plus complet.

autre point de détail tant que j'y suis a pinailler:
If isError Is Nothing Then isError = "c'est OK, le zip est fait"
label1.text = isError
le fait de mettre le message que tout va bien dans l'erreur ... c'est crade non?


en bref: bonne idée mais code crade et a retoucher pour l'exploiter réellement.
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
20 févr. 2005 à 12:51
Oh j'ai rien fait d'extravagant j'ai juste rajouter un OpenFiledialog à la l'endroit pour voir le chemin de destination de l'archive ici:
strmZipOutputStream = New ZipOutputStream(File.Create("D:\Documents " & now.ToString("dd.MMMM.yyyy hh-mm") & ".zip"))
Mais bon voilà de toue facon le code est très bien fait et ca sert à rien de le modifié davantage lolllllllll
Bah je vais essayé de recherché de mon coté comment dézipper une archive et je te le dirai.

En fait j'en ai besoin car ds mon appli dc j'ai un bouton export vers zip (et dc si il y a un export, il fô bien un import ossi sinon ca sert à rien llolllllllllllll)
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 févr. 2005 à 13:44
Je me suis pas posé la question pour dezipper la meme archive, car je m'en sert pour faire du stockage.

Si t'as amélioré quelque chose, j'ai bien envie de voir :)

Contacts moi par les messages privées, je te donnerais mon mail.

Cyril
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
19 févr. 2005 à 13:40
Franchement impec ta source à part quelque petit truc ss importance ke je vai modifié moi même komm on on ve stocké l'archive etc............
Par contre dis moi tu sai komment dézipper la même archive????
Rejoignez-nous