COMPRESSION PAR DLL

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 2 sept. 2006 à 18:20
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 10 oct. 2006 à 21:57
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/39396-compression-par-dll

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 oct. 2006 à 21:57
ah ben non, pas le but du jeu du tout.

Si tu y tiens, reprends le code (lien en decription de source) et appelle le en récurrence sur FindFirstFile() FindNextFile(). Pas besoin d'être grand clerc mais vraiment pas le temps de le faire.
cs_Grandnord Messages postés 6 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 octobre 2006
10 oct. 2006 à 21:45
Est-ce possible de compresser des répertoires avec les sous-répertoires?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2006 à 10:27
Chaque chose a son emploi, voila tout. Ajouter le multi fichier dans archive ne serait techniquement pas difficile mais c'est long à mettre en place, à moins d'une commande privée, aucune chance que je perde du temps dessus.
Polémique, sur quoi ???
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
5 sept. 2006 à 10:14
ok pas de polémique mais bon... hem... heureusement qu'y C#lib
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2006 à 09:34
Fait pour compresser les fichiers de données de VOS progs, pas prévu pour concurrencer winzip ou winrar.
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
5 sept. 2006 à 08:08
Bonjour,

Après test, cela compress légèrement mieux que C#Zip de sourceforge mais y a-t-il la possibilité possibilité de compresser tout un répertoire ? si oui y a-t-il possibilité de faire de la compression "intelligente" à savoir ne compresser que les fichiers qui ne sont pas déja dans le zip ou qui sont différents de ceux déja présents ?
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
4 sept. 2006 à 19:39
beaucoup beaucoup merci, c génial.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2006 à 18:21
C'est fait.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2006 à 18:09
A moins de décompiler puis modifier le code binaire de la DLL, rien à intercepter, c'est fermeture (et non plantage).

J'ajoute bnUnzipFileSecMin() qui sera idem que bnUnzipFileSec() mais retournera BNERR_SYST si pass faux mais sans fermer l'appelant. Sera dernière MAJ.
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
4 sept. 2006 à 17:57
Merci Brunews, super nickel.

juste un point sur ce commentaire
' ATTENTION SI bnz EST FAIT PAR bnZipFile()
' OU bnZipFileSec() AVEC passNbr DIFFERENT
' FERMETURE IMMEDIATE DE CE PROG A PREVOIR
Je constate également que si le fichier n'est pas un vrai fichier *.bnz le programme se ferme.
Comment prévoir/empêcher ce plantage?
ça ressemble à vouloir le pain chargé + argent du chargement.

Mais en réalité ça peut devenir un grand problème si cette option est intégrée à un programme libre qui doit planter chaque fois que l'utilisateur sélectionne le mauvais fichier ou donne un mauvais password. Même un conseil pour le contrôle du plantage serait toujours super.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2006 à 16:51
MAJ disponible.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2006 à 14:53
MAJ de la source pour ce soir si tout va bon.
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
4 sept. 2006 à 14:22
@Brunews : comment faire pour avoir la version qui intègre bnZipFileSecure et bnUnzipFileSecure. Une mise à jour est-elle avenir? ou alors http://www.cppfrance.com/code.aspx?ID=39145 ferait l'affaire.

Comme tu le disais avec un appel SetCurrentDirectory(app.path) au début pas besoin de ...
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2006 à 12:25
Aucun password dans cette version standard.

Irait ainsi:
Declare Function bnZipFileSecure Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String, ByVal passNbr As Long) As Long
Declare Function bnUnzipFileSecure Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String, ByVal passNbr As Long) As Long
je RAJOUTE ces 2 fonctions avec un param 32 bits, si bnUnzipFileSecure() appelé et que passNbr ne correspond pas, au choix je retourne BNERR_DATA (histoire de ne pas indiquer quelle erreur) ou alors je démappe direct le processus appelant de la mémoire (éviter piratage par tentative en boucle).
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
4 sept. 2006 à 11:58
@Brunews : y'a t-il une possibilité de compresser/décompresser avec option password sur ta DLL?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2006 à 10:52
Si l'alloc mémoire réussit au début (non dépendant de taille fichier), aucune limite (64 bits full).
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
4 sept. 2006 à 09:54
Bonjour,

j'ai pas encore testé mais jusqu'à combien de Go elle peut compresser par fichier et en tout ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2006 à 19:11
Avec les 2 'Declare', il y a 12 lignes en VB.
C'est donc une source exemple avec un code libre de droit et d'utilisation dont les sources sont fournies en lien dans la partie 'description'.
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
2 sept. 2006 à 18:57
Jack> Correction, ce n'est pas du VB !
BruNews> Sans vouloir t'offensé je me demande même ce que ça vient faire ici :

- Ce n'est pas du VB.
- Il n'y a pas de code source.
- Il n'y a pas projet d'exemple mais seulement une dll.

Bref j'en connais deux/trois qui aurait deja viré le post depuis longtemps. Autant utilisé Zlib qui est libre de droit completement compatible avec vb dont les sources sont diponible avec des projet demo. Cela n'enleve pas l'excelence de ton travail mais cela n'est pas correct vis a vis des autres usager de CS a qui l'on reproche ce genre de pratique.

@+
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2006 à 18:49
PRECISION:
Placer un appel SetCurrentDirectory(app.path) au tout début du prog assure que la DLL est trouvée dans le dossier de l'exe, ça permet de distribuer des progs avec différentes versions de la DLL.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2006 à 18:46
BNERR_OK = REUSSITE
BNERR_FILE = erreur sur ouverture du fichier source ou création du fichier cible.
BNERR_SYST = erreur lecture ou écriture des fichiers.
BNERR_MEM = erreur mémoire indisponible.
BNERR_BUF = erreur interne, buffer de décompression trop petit, me le signaler si (cas improbable) devait arriver, j'augmenterai la taille.
Les autres cas d'erreurs sont internes aux algos zlib, considérer que les données sont altérées.

Niet jack, comme précisé sur les sources C, hors de question de refaire un concurrent winzip, ce n'est pas le but.
Si qlq'un a besoin d'une version personnalisée de la DLL afin que les données ne soient pas déchiffrables par un autre soft, me le demander et sera fait selon disponibilité.
cs_Goel Messages postés 4 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 2 septembre 2006
2 sept. 2006 à 18:23
a vria dire, le DLL est dans le dossier d'execution du programme l'utilisant. Aucun besoin de l'avoir dans le systeme semble t'il.
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 sept. 2006 à 18:22
Si tu pouvais détailler ce que signifient les n° d'erreurs retournées par les fonctions ?
cs_Goel Messages postés 4 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 2 septembre 2006
2 sept. 2006 à 18:21
Et bien je viens de tester. c'est bcp plus rapide que l'ancien. Félicitation pour ce boulot, car ca marche parfaitement. 10/10!

En plus très utile!!
tu viens de rendre un énorme service sur mon projet qui nécéssitait de compresser, decompresser des fichier (pour update).
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 sept. 2006 à 18:20
Du VB par BruNews ? ... must see !
Bien sûr, ça marche impec. Merci
Il faut quand même rappeler qu'il faut implanter la DLL dans le répertoire %Win%\System32 (ou préciser le chemin dans la déclaration = pas propre et instransportable)
Comme détaillé dans la source C (lien du commentaire), ce n'est pas une compression compatible ZIP, alors ne venez pas demander.

Les questions qui viennent ensuite :
- Comment faire pour insérer plusieurs fichier dans une même archive ?
- Comment lister le ou les fichiers que renferme une archive ?
- Comment mémoriser les chemins relatifs ? (et comment les restituer)

Dans une prochaine version de la DLL ?
Rejoignez-nous