Gambas France BETA


Pas de compte ? Incription

Existe-t-il ne solution pour compresser plusieurs fichier en un seul zip ?

1
AuteurMessages
O.Coquet#1 Posté le 7/11/2024 à 16:04:13
Ce qui n'est pas devra-t-être inventéTout est dans le titre !

Je cherche une solution pour réaliser une archive de plusieurs fichiers dans un seul .zip, est-ce que ça vous dit quelques choses ?

Merci d'avance pour vos réponses.

Olivier
Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4, pc Xubuntu, Arduino.....
Quelques autres "vieux" ordinateurs !
Et un bon fer à souder
O.Coquet#2 Posté le 7/11/2024 à 17:32:55
Ce qui n'est pas devra-t-être inventéBon j'ai posé ma question trop vite, j'ai trouvé tout seul avec un:

1
EXEC ["zip", "-jrum", Application.path & "/Backup_log/ArchiveLog.zip", Application.path & "/Backup_log", "-x", "*.zip"]



Y'avait qu' à

Olivier
Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4, pc Xubuntu, Arduino.....
Quelques autres "vieux" ordinateurs !
Et un bon fer à souder
vuott#3 Posté le 7/11/2024 à 19:20:56
Ne cedere ineluctabili possimusSi vous ne voulez pas utiliser "Shell" ou "Exec", vous pouvez utiliser les ressources de la bibliothèque externe "libzip.so".

Voici un exemple simple pour compresser deux fichiers en un seul fichier ZIP compressé:
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
LIBRARY "libzip:5.5"

PRIVATE CONST ZIP_CREATE AS INTEGER = 1

' struct zip *zip_open(const char *, int, int *)
' Open zip archive.
PRIVATE EXTERN zip_open(path AS STRING, flags AS INTEGER, errorp AS POINTER) AS POINTER

' struct zip_source *zip_source_file(struct zip *, const char *, zip_uint64_t, zip_int64_t)
' Create data source from a file.
PRIVATE EXTERN zip_source_file(archive AS POINTER, fname AS STRING, start AS LONG, len AS LONG) AS POINTER

' zip_int64_t zip_add(struct zip *, const char *, struct zip_source *)
' Add file to zip archive or replace file in zip archive.
PRIVATE EXTERN zip_add(archive AS POINTER, path AS STRING, source AS POINTER) AS LONG

' int zip_close(struct zip *)
' Close zip archive.
PRIVATE EXTERN zip_close(archive AS POINTER) AS INTEGER


PUBLIC SUB Main()

DIM zip, src AS POINTER
DIM err AS INTEGER
DIM l AS LONG

' Définit le chemin du fichier compressé .zip à créer :
zip = zip_open("/tmp/file.zip", ZIP_CREATE, VarPtr(err))
IF zip == 0 THEN
zip_close(zip)
Error.Raise("Impossible de créer le fichier 'zip'!"
ENDIF


' Localise le PREMIER fichier à compresser et son chemin entier:
src = zip_source_file(zip, "/chemin/du/PREMIER/fichier", 0, 0)
IF src == 0 THEN
zip_close(zip)
Error.Raise("Impossible de créer la source de données du fichier à compresser !"
ENDIF

' Insère le fichier, en définissant son ****nom et son extension éventuelle****, dans le fichier .zip.
' Si vous le souhaitez, vous pouvez également créer un dossier dans le fichier. zip et y insérer le fichier à compresser.
l = zip_add(zip, "fichier_1.xxx", src)
IF l < 0 THEN
zip_close(zip)
Error.Raise("Impossible de compresser le fichier choisi !")
ENDIF


' Localise le ***SECOND*** fichier à compresser et son chemin entier:
src = zip_source_file(zip, "/chemin/du/SECOND/fichier", 0, 0)
IF src == 0 THEN
zip_close(zip)
Error.Raise("Impossible de créer la source de données du fichier à compresser !"
ENDIF

' Insère le fichier, en définissant son ****nom et son extension éventuelle****, dans le fichier .zip.
' Si vous le souhaitez, vous pouvez également créer un dossier dans le fichier. zip et y insérer le fichier à compresser.
l = zip_add(zip, "fichier_2.xxx", src)
IF l < 0 THEN
zip_close(zip)
Error.Raise("Impossible de compresser le fichier choisi !")
ENDIF

' Ferme la bibliothèque:
zip_close(zip)

END
« Vita non suavis esse potest, nec Mors amara. »
O.Coquet#4 Posté le 8/11/2024 à 08:08:46
Ce qui n'est pas devra-t-être inventéPas mal, je vais étudier ça de plus près, merci.

Question, cette librairie est elle installée de base sur toutes les distributions linux ????


Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4, pc Xubuntu, Arduino.....
Quelques autres "vieux" ordinateurs !
Et un bon fer à souder
pinky#5 Posté le 8/11/2024 à 09:09:37
Bonjour Olivier,
Je ne sais pas si elle est installée sur toutes les distributions Linux, mais j'ai bien la librairie "libzip5" sous Ubuntu 20.04 LTS.

Informations sur le paquet libzip5 :
libzip est une bibliothèque C pour lire, créer et modifier des archives zip. Les fichiers peuvent être ajoutés à partir des tampons de données, fichiers ou de données compressées copiés directement à partir d'autres archives zip. Les modifications apportées sans fermer l'archive peuvent être annulées.

Ce paquet contient les fichiers nécessaires pour exécuter des applications qui utilisent la bibliothèque libzip.
Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
O.Coquet#6 Posté le 8/11/2024 à 10:26:01
Ce qui n'est pas devra-t-être inventéMerci du renseignement, moi aussi sur Xubuntu 24
Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4, pc Xubuntu, Arduino.....
Quelques autres "vieux" ordinateurs !
Et un bon fer à souder
linuxos#7 Posté le 9/11/2024 à 16:59:20
Un peu de sel, de poivre et la crevette sera... Bonjour Olivier,

Voici une solution de compression de fichier déja fournie pas Gambas

Certe ce n'est pas une compression ZIP mais GZIP, mais tellement plus facile il me semble, surtout pour 1 seul fichier a la fois.

https://gambaswiki.org/wiki/comp/gb.compress/compress/file?l=fr

1
2
3
4
5
DIM Cp AS NEW Compress

Cp.Type = "zlib"
Cp.File("/home/foo/README.TXT" , "/home/foo/README.TXT.gz" , Cp.Max)
...


Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
O.Coquet#8 Posté le 9/11/2024 à 17:45:53
Ce qui n'est pas devra-t-être inventéMerci, sauf que moi je voulais compresser plusieurs fichiers en une seule archive et à priori, notre chère gambas ne sait pas faire :)


en tous cas merci de t'être donné la peine :)
Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4, pc Xubuntu, Arduino.....
Quelques autres "vieux" ordinateurs !
Et un bon fer à souder
vuott#9 Posté le 9/11/2024 à 20:00:35
Ne cedere ineluctabili possimusOlivier,
avez-vous pu utiliser la bibliothèque libzip ?
« Vita non suavis esse potest, nec Mors amara. »
O.Coquet#10 Posté le 10/11/2024 à 11:24:00
Ce qui n'est pas devra-t-être inventéJ'ai testé, ça fonctionne bien, pour l'instant je reste sur mon exec, mais je garde ça en réserve, merci de ta solution qui me servira bientôt.
Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4, pc Xubuntu, Arduino.....
Quelques autres "vieux" ordinateurs !
Et un bon fer à souder
1