PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Stocker un fichier avec memo dans un buffer
Stocker un fichier avec memo dans un buffer
Iniciado por lacroix.atoo, 12,abr. 2019 16:43 - 4 respuestas
Publicado el 12,abril 2019 - 16:43
Bonjour à tous,

J'ai la problématique suivante, j'ai besoin de stocker dans un buffer
binaire un fichier HF complet (enregistrement et memo)

J'y arrive en créant un objet ou une structure et en sérialisant le
tableau mémoire chargé mais j'aurais aimé le faire sans avoir besoin de
déclarer la structure à partir d'un variant ou d'un tableau de variant
afin de réaliser un outil générique, on passe le nom du fichier et point
barre.

Manque de bol le fichierVersMemoire(MonVariant,Monfichier) ne fonctionne
pas.

Charger directement le fichier à partir d'un fChargeBuffer n'est pas une
solution, le fichier HF pouvant être hébergé sur un client/serveur.



Si vous avez une astuce, je suis preneur.

Merci d'avance,

Fred.
Miembro registrado
1.640 mensajes
Publicado el 12,abril 2019 - 17:12
Salut,

Ceci semble fonctionner, a adapter a tes besoin

// ex avec le fichier "Configuration"
HLitPremier("Configuration")
gvTest est un Variant
gsListeRubrique est une chaîne = HListeRubrique("Configuration", hLstRubrique)
vFichier est un Variant
POUR TOUTE chaîne sUneRubrique de gsListeRubrique SEPAREE PAR RC
{"vFichier"+"."+sUneRubrique} = {"Configuration" + "."+ sUneRubrique}
FIN
Mensaje modificado, 12,abril 2019 - 17:13
Publicado el 14,abril 2019 - 11:29
Merci pour cette piste.

J'ai adapté ton code en remplaçant le hLstRubrique du hListeRubrique par
hLstTout afin d'avoir aussi les clés et les mémos.

Mon tableau de variant se remplis bien, par contre la sérialisation
binaire du variant ne prends pas en compte les rubriques "images".

La seule "astuce" que j'ai trouvé pour l'instant, c'est faire une
compression gZip des rubriques mémo image (seules dont j'ai besoin pour
l'instant).

Dans ce cas, cela sérialise correctement car le type de la rubrique est
wlbuffer, si je ne compresse pas le membre variant prends
automatiquement le type "image" et la sérialisation ne passe pas.

Je suis en WD23

<Code wd>
PROCÉDURE INTERNE FichierVersBuffer(pFichier est une Source de Données)
gsListeRubrique est une chaîne = HListeRubrique(pFichier,hLstTout)
sUneRubrique est une chaîne
vFichier est un Variant
lTabVariant est un tableau de Variant
HLitPremier(pFichier)
TANTQUE PAS HEnDehors(pFichier)
POUR TOUTE CHAÎNE sUneRubrique DE gsListeRubrique SEPAREE PAR RC
SI {pFichier..Nom + "."+ sUneRubrique}..Type = 18 ALORS
lImg est un Buffer = Compresse({pFichier..Nom + "."+
sUneRubrique},compresseGZIP)
{"vFichier"+"."+sUneRubrique} = lImg
SINON
{"vFichier"+"."+sUneRubrique} = {pFichier..Nom + "."+ sUneRubrique}
FIN
FIN
TableauAjoute(lTabVariant,vFichier)
HLitSuivant(pFichier)
FIN

lBuffer est un Buffer
Sérialise(lTabVariant,lBuffer,psdBinaire)
RENVOYER lBuffer
FIN
</code wd>




Le 12/04/2019 à 15:12, "François C." a écrit :
Salut,

Ceci semble fonctionner, a adapter a tes besoin
// ex avec le fichier "Configuration"
HLitPremier("Configuration")
gvTest est un Variant
gsListeRubrique est une chaîne = HListeRubrique("Configuration",
hLstRubrique)
vFichier est un Variant
POUR TOUTE CHAÎNE sUneRubrique DE gsListeRubrique SEPAREE PAR RC
    {"vFichier"+"."+sUneRubrique} = {"Configuration" + "."+ sUneRubrique}
FIN
Miembro registrado
1.640 mensajes
Publicado el 15,abril 2019 - 10:11
Et c'est surement la bonne façon de faire ;)
Publicado el 15,abril 2019 - 15:16
Le 15/04/2019 à 08:11, "François C." a écrit :
> Et c'est surement la bonne façon de faire ;)

Oui, intégré et fonctionnel dans mon projet ... que du bonheur, la
boucle en sens inverse permet la décompression et l'affectation dans le
champ image.

Encore merci.

Fred.