Bonsoir à tous,
est-ce que quelqu'un pourrait m'expliquer les arguments de la fonction CreateXMLNode, car l'ide n'est pas très explicite.
Je vous remercie tous du fond du coeur.
Problème avec CreateXMLNode
Problème avec CreateXMLNode
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Problème avec CreateXMLNode
Avant toute chose, une petite observation, depuis la version 5.30, La gestion des fichier XML diffère un peu des versions précédentes y compris la version 5.23 LTS.
Sa syntaxe est Resultat = CreateXML(#XML [, Encodage]) (PB 5.30)
Finalement cette fonction n'est pas difficile à appréhender
Un identifiant xml et un encodage qui prendra la valeur #PB_UTF8 par défaut que je te conseille de garder si tu dois stocker des accents.
Un exemple pour finaliser ces explications dans lequel nous allons :
- Créer un objet XML
- Créer un noeud <Adresse> ... </Adresse> dans lequel on va insérer les nœuds fils
<Name> ... </Name>
<Telephone> ... </Telephone>
-Sauvegarder cette objet dans un fichier de type XML.N'oublies pas de sauvegarder ce code dans un dossier
Le fichier xml que tu retrouveras dans ce dossier aura cette structure
CreateXML() Crée un objet XML vide.Micoute a écrit :est-ce que quelqu'un pourrait m'expliquer les arguments de la fonction CreateXMLNode
Sa syntaxe est Resultat = CreateXML(#XML [, Encodage]) (PB 5.30)
Finalement cette fonction n'est pas difficile à appréhender
Un identifiant xml et un encodage qui prendra la valeur #PB_UTF8 par défaut que je te conseille de garder si tu dois stocker des accents.
Un exemple pour finaliser ces explications dans lequel nous allons :
- Créer un objet XML
- Créer un noeud <Adresse> ... </Adresse> dans lequel on va insérer les nœuds fils
<Name> ... </Name>
<Telephone> ... </Telephone>
-Sauvegarder cette objet dans un fichier de type XML.
Code : Tout sélectionner
EnableExplicit
Enumeration
#XMLObject
EndEnumeration
Global XMLFileName.s = "test.xml", RootNode, ChildNode
; Création d'un objet xml
CreateXML(#XMLObject, #PB_UTF8 )
;Creation du noeud adresse qui contiendra les les nœuds fils de l'adresse
RootNode = CreateXMLNode(RootXMLNode(#XMLObject), "Adresse")
; Ajout du noeud enfant nom et de la valeur associée
ChildNode = CreateXMLNode(RootNode, "Name") ;Le nœuds
SetXMLNodeText(ChildNode, "Joe Down") ;La valeur
; Ajout du noeud enfant téléphone et de la valeur associée
ChildNode = CreateXMLNode(RootNode, "Telephone")
SetXMLNodeText(ChildNode, "0631224565")
;Sauvegarde dans un fichier XML
SaveXML(#XMLObject, XMLFileName)
FreeXML(#XMLObject)

Le fichier xml que tu retrouveras dans ce dossier aura cette structure
Pour enregistrer plusieurs adresses, la technique est un peu différente. Si toi ou quelqu'un d'autre souhaite une explication, n'hésitez pas à demander<?xml version="1.0" encoding="UTF-8"?><Adresse><Name>Joe Down</Name><Telephone>0631224565</Telephone></Adresse>

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Problème avec CreateXMLNode
Bonjour falsam,
je ne comprend pas, j'ai fait comme tu m'as dit, mais j'ai une erreur à la décompression, car le programme ne reconnaît pas l'archive.
Je t'envoie mon code pour que tu voies ce qui ne va pas, j'imagine qu'il est inutile que je te dise de changer les chemins des fichier !
je ne comprend pas, j'ai fait comme tu m'as dit, mais j'ai une erreur à la décompression, car le programme ne reconnaît pas l'archive.
Je t'envoie mon code pour que tu voies ce qui ne va pas, j'imagine qu'il est inutile que je te dise de changer les chemins des fichier !
Code : Tout sélectionner
;/ *** Format fichier CFz ***
;/ (ConteneurFichiers ZIP)
;/ Août 2014 Michel Lye
;/ nécessaire PureBasic V5.30
UseZipPacker()
#CFXmlZip = 0 ; #XML Nombre (éventuellement ajuster)
#CFPackZip = 0 ; #Pack Nombre (éventuellement ajuster)
#CleAES = "CleDeMonProg1234AES5678" ; définir sa propre clé !!!
#CleDES = "D12E34S" ; définir sa propre clé !!!
#ExtFichierAES = "acf"
Structure CFzipStructure
; --- Personnaliser les informations conteneur si nécessaire ---
Type.s
Info.s
Auteur.s
; -------------------------------------
Map *Fichier()
EndStructure
Global CFzip.CFzipStructure
;- Outils
Procedure.s FileNoExtension(Fichier.s)
; chemin et nom du fichier sans l'extension
ProcedureReturn Left(Fichier, Len(Fichier)-Len(GetExtensionPart(Fichier))-1)
EndProcedure
Procedure CFzip_GetPackFileSize(NomFichier.s)
; taille non compressée du fichier dans le ZIP
If ExaminePack(#CFPackZip)
While NextPackEntry(#CFPackZip)
If PackEntryName(#CFPackZip) = NomFichier
ProcedureReturn PackEntrySize(#CFPackZip)
EndIf
Wend
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_ClearFileInfo()
; Réinitialiser Structure et Map
; --- Personnaliser les informations du conteneur si nécessaire ---
CFzip\Type = ""
CFzip\Info = ""
CFzip\Auteur = ""
; -------------------------------------
ClearMap(CFzip\Fichier())
EndProcedure
Procedure.s CFzip_GetFileInfo(Fichier.s, Attribut.s="")
; Lire les informations sur le fichier
*Fichier = CFzip\Fichier(GetFilePart(Fichier))
If *Fichier
If Attribut
ProcedureReturn GetXMLAttribute(*Fichier, Attribut)
Else
ProcedureReturn GetXMLNodeText(*Fichier)
EndIf
EndIf
EndProcedure
;- Codage AES
; En utilisant l'identifiant de fichier on peut vérifier s'il s'agit d'un fichier valide
; pour le programme ou de l'action du fichier.
Procedure.b CFzip_WriteAESPack(Fichier.s, MotDePasse.s, IDFichier.s="monProg", calme.b=#False)
Protected LongueurFichier.l, SFId.l, Cle$= #CleAES, Resultat.b = #False
Protected *FichierMemoire, *Memoire, *IDMemoire
Protected NomFichier.s = GetFilePart(Fichier)
Protected FichierAES.s = FileNoExtension(NomFichier) + "." + #ExtFichierAES
Protected MdpDES.s = DESFingerprint(MotDePasse, #CleDES)
If FileSize(Fichier) <= 0
ProcedureReturn #False
EndIf
SFId = ReadFile(#PB_Any, Fichier)
If SFId
LongueurFichier = Lof(SFId) ; longueur du fichier
*FichierMemoire = AllocateMemory(LongueurFichier)
If *FichierMemoire
If ReadData(SFId, *FichierMemoire, LongueurFichier)
; Calculer la taille d'en-tête
TailleEntete = StringByteLength(IDFichier) + StringByteLength(MdpDES) +
StringByteLength(NomFichier) + 11
; Allouer de la mémoire pour en-tête et fichier
TailleMemoire = TailleEntete + MemorySize(*FichierMemoire)
*Memoire = AllocateMemory(TailleMemoire)
If *Memoire
*IDMemoire = *Memoire
;{ écrire en-tête
PokeS(*IDMemoire, IDFichier) ; IDFichier (p.e. "monProg")
*IDMemoire + StringByteLength(IDFichier) + 1
PokeL(*IDMemoire, LongueurFichier) ; Longueur réelle du fichier
*IDMemoire + 4
PokeS(*IDMemoire, MdpDES) ; Mote de passe DES
*IDMemoire + StringByteLength(MdpDES) + 1
PokeS(*IDMemoire, NomFichier) ; Nom du fichier
*IDMemoire + StringByteLength(NomFichier) + 1
;}
If AESEncoder(*FichierMemoire, *IDMemoire, MemorySize(*FichierMemoire), @Cle$, 128, 0,
#PB_Cipher_ECB)
If AddPackMemory(#CFPackZip, *Memoire, TailleMemoire, FichierAES)
Resultat = #True
EndIf
EndIf
FreeMemory(*Memoire)
EndIf
ElseIf calme = #False
MessageRequester(" CFzip - Ouverture fichier", "Le fichier ne peut pas être lu!",
#MB_OK|#MB_ICONERROR)
EndIf
FreeMemory(*FichierMemoire)
EndIf
CloseFile(SFId)
EndIf
ProcedureReturn Resultat
EndProcedure
Procedure.s CFzip_ReadAESPack(FichierAES.s, MotDePasse.s, CheminCible.s="", IDFichier.s="monProg",
calme.b=#False)
Protected FileSize.l, MemIDFichier.s, MemMdpDES.s, NomFichier.s, LongueurFichier.l, TFId.l,
Cle$ = #CleAES
Protected *FichierMemoire, *Memoire, *IDMemoire
Protected MdpDES.s = DESFingerprint(MotDePasse, #CleDES)
If CheminCible = "" : CheminCible = GetPathPart(FichierAES) : EndIf
FileSize = CFzip_GetPackFileSize(GetFilePart(FichierAES))
If FileSize
*Memoire = AllocateMemory(FileSize)
If *Memoire
*IDMemoire = *Memoire
If UncompressPackMemory(#CFPackZip, *Memoire, FileSize, GetFilePart(FichierAES))
; IDFichier
MemIDFichier = PeekS(*IDMemoire)
*IDMemoire + StringByteLength(MemIDFichier) + 1
If IDFichier = MemIDFichier ; vérifier IDFichier (p.e. monProg)
LongueurFichier = PeekL(*IDMemoire) ; Taille réelle du fichier
*IDMemoire + 4
; lire le mot de passe
MemMdpDES = PeekS(*IDMemoire)
*IDMemoire + StringByteLength(MemMdpDES) + 1
If MdpDES = MemMdpDES ; vérifier le mot de passe
NomFichier = PeekS(*IDMemoire)
*IDMemoire + StringByteLength(NomFichier) + 1
; --- décrypter le fichier ---
*FichierMemoire = AllocateMemory(LongueurFichier)
If *FichierMemoire
If AESDecoder(*IDMemoire, *FichierMemoire, LongueurFichier, @Cle$, 128, 0, #PB_Cipher_ECB)
; Écrire le fichier sur le disque dur
TFId = CreateFile(#PB_Any, CheminCible+NomFichier)
If TFId
WriteData(TFId, *FichierMemoire, LongueurFichier)
CloseFile(TFId)
Else
If calme ;{ Le fichier ne peut pas être créé
NomFichier = "ERREUR:CreateFile"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier",
"Erreur d'accès au fichier CFzip!"+
#LF$+
"Vérifier que vous disposez des droits d'accès nécessaires (RW) "+
"pour le répertoire suivant:"+
#LF$+
GetPathPart(FichierAES), #MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
Else
If calme ;{ Décryption / décompression échouée
NomFichier = "ERREUR:AES"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier",
"Le fichier ne peut pas être déchiffré!", #MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
FreeMemory(*FichierMemoire)
EndIf
Else
If calme ;{ mot de passe incorrect
NomFichier = "ERREUR:MotDePasse"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier",
"Le mot de passe du fichier ne correspond pas au mot de passe de CFzip! "+
"L'accès au fichier a été refusé!",
#MB_OK|#MB_ICONWARNING)
EndIf ;}
EndIf
Else ;
If calme ;{ mauvais IDFichier
NomFichier = "ERREUR:IDFichier"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier", "fichier non valide ("+IDFichier+")!",
#MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
EndIf
FreeMemory(*Memoire)
EndIf
Else
If calme ;{ Le fichier n'est pas dans le ConteneurFichiers
NomFichier = "ERREUR:ConteneurFichiers"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier", "Le fichier n'a pas été trouvé dans le fichier de "+
"package!", #MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
ProcedureReturn NomFichier
EndProcedure
; Décoder un fichier crypté (en dehors du ConteneurFichiers)
Procedure.s CFzip_DecodeFichierAES(FichierAES.s, MotDePasse.s, CheminCible.s="", IDFichier.s="monProg",
calme.b=#False)
Protected NomFichier.s, LongueurFichier.l, TFId.l, SFId.l, Cle$ = #CleAES
Protected *FichierMemoire, *Memoire
Protected MdpDES.s = DESFingerprint(MotDePasse, #CleDES)
If FileSize(FichierAES) <= 0 : ProcedureReturn "" : EndIf
If CheminCible = "" : CheminCible = GetPathPart(FichierAES) : EndIf
SFId = ReadFile(#PB_Any, FichierAES)
If SFId
If ReadString(SFId) = IDFichier ; IDFichier (fichier valide?) vérifier
LongueurFichier = ReadLong(SFId); Longueur du fichier
If ReadString(SFId) = MdpDES ; vérifier le mot de passe
NomFichier = ReadString(SFId) ; Nom du fichier avec l'extension
*Memoire = AllocateMemory(LongueurFichier)
If *Memoire
If ReadData(SFId, *Memoire, LongueurFichier)
*FichierMemoire = AllocateMemory(MemorySize(*Memoire))
If *FichierMemoire
If AESDecoder(*Memoire, *FichierMemoire, LongueurFichier, @Cle$, 128, 0, #PB_Cipher_ECB)
TFId = CreateFile(#PB_Any, CheminCible+NomFichier)
If TFId
WriteData(TFId, *FichierMemoire, LongueurFichier)
CloseFile(TFId)
Else
If calme ;{ Le fichier ne peut pas être créé
NomFichier = "ERREUR:CreateFile"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier",
"Erreur d'écriture du fichier décrypté!"+#LF$+
"Vérifier que vous disposez des droits d'accès nécessaires (RW) "+
"pour le répertoire suivant:"+#LF$+
GetPathPart(FichierAES), #MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
Else
If calme ;{ Décryption / décompression échouée
NomFichier = "ERREUR:AES"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier", "Le fichier ne peut pas être déchiffré!",
#MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
FreeMemory(*FichierMemoire)
EndIf
Else
NomFichier = ""
EndIf
FreeMemory(*Memoire)
Else
NomFichier = ""
EndIf
Else
If calme ;{ mauvais mot de passe
NomFichier = "ERREUR:MotDePasse"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier",
"Le mot de passe du fichier ne correspond pas au mot de passe de CFzip! "+
"L'accès au fichier a été refusé!",
#MB_OK|#MB_ICONWARNING)
EndIf ;}
EndIf
Else
If calme ;{ mauvais IDFichier
NomFichier = "ERREUR:IDFichier"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier", "fichier (" + IDFichier + ") non valide !",
#MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
CloseFile(SFId)
Else
If calme ;{ Le fichier ne peut pas être lu
NomFichier = "ERREUR:FichierAES"
Else
NomFichier = ""
MessageRequester(" CFzip - Ouverture fichier", "Impossible de lire le fichier!",
#MB_OK|#MB_ICONERROR)
EndIf ;}
EndIf
ProcedureReturn NomFichier
EndProcedure
;- "contenu.xml"Gérer (informations sur le contenu du ConteneurFichiers)
Procedure CFzip_CreateContentXML(Type.s, Info.s, Auteur.s)
; Créer un nouveau fichier XML
; Si nécessaire, ajuster les paramètres de CFzipStructure (voir ci-dessous)
If CreateXML(#CFXmlZip)
*NoeudPrincipal = CreateXMLNode(RootXMLNode(#CFXmlZip),"Contenu")
If *NoeudPrincipal
;Debug GetXMLNodeName(*NoeudPrincipal)
SetXMLNodeName(*NoeudPrincipal, "Contenu")
;Debug GetXMLNodeName(*NoeudPrincipal)
; --- Personnaliser les informations du conteneur si nécessaire ---
SetXMLAttribute(*NoeudPrincipal, "type", Type)
SetXMLAttribute(*NoeudPrincipal, "info", Info)
SetXMLAttribute(*NoeudPrincipal, "Auteur", Auteur)
; -------------------------------------
CFzip\Type = Type
CFzip\Info = Info
CFzip\Auteur = Auteur
; -------------------------------------
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_OpenContentXML()
; Lecture d'un fichier XML et le stocker dans la structure
; Paramètre nécessaire uniquement si
Protected *MemXml, TailleXml.l
CFzip_ClearFileInfo() ; Structure & Map Raz / Effacer
;{ Décompresser et télécharger XML
TailleXml = CFzip_GetPackFileSize("contenu.xml")
If TailleXml
*MemXml = AllocateMemory(TailleXml)
If *MemXml
If UncompressPackMemory(#CFPackZip, *MemXml, TailleXml, "contenu.xml")
CatchXML(#CFXmlZip, *MemXml, TailleXml)
EndIf
FreeMemory(*MemXml)
EndIf
Else
ProcedureReturn #False
EndIf ;}
;{ sélectionner "contenu.xml"
If IsXML(#CFXmlZip)
If XMLStatus(#CFXmlZip) = #PB_XML_Success
*NoeudPrincipal = MainXMLNode(#CFXmlZip)
If *NoeudPrincipal
; ---Personnaliser les informations du conteneur si nécessaire ---
CFzip\Type = GetXMLAttribute(*NoeudPrincipal, "type")
CFzip\Info = GetXMLAttribute(*NoeudPrincipal, "info")
CFzip\Auteur = GetXMLAttribute(*NoeudPrincipal, "Auteur")
; -------------------------------------
*Contenu = ChildXMLNode(*NoeudPrincipal) ; Fichiers dans le ConteneurFichiers
While *Contenu
CFzip\Fichier(GetXMLNodeText(*Contenu)) = *Contenu
*Contenu = NextXMLNode(*Contenu)
Wend
ProcedureReturn #True
EndIf
Else
Debug "XML: "+XMLError(#CFXmlZip)
EndIf
Else
Debug "XML: Aucun fichier XML valide"
EndIf ;}
ProcedureReturn #False
EndProcedure
Procedure CFzip_CloseContentXML()
; fichier XML (éventuellement avec des données actualisées) Reprises dans ConteneurFichiers
Protected *MemXml, TailleXml.l, Resultat.l = #False
If IsXML(#CFXmlZip)
TailleXml = ExportXMLSize(#CFXmlZip)
*MemXml = AllocateMemory(TailleXml)
If *MemXml
If ExportXML(#CFXmlZip, *MemXml, TailleXml)
RemovePackFile(#CFPackZip, "contenu.xml")
Resultat = AddPackMemory(#CFPackZip, *MemXml, TailleXml, "contenu.xml")
EndIf
FreeMemory(*MemXml)
EndIf
FreeXML(#CFXmlZip)
EndIf
EndProcedure
Procedure CFzip_UpdateContentXML(Fichier.s, supprimer.b=#False, aes.b=#False)
; Fichier XML Mise à jour structure & fichier
If IsXML(#CFXmlZip)
If supprimer ;{ Supprimer l'entrée du fichier
*Fichier = CFzip\Fichier(GetFilePart(Fichier))
If *Fichier
If DeleteXMLNode(*Fichier)
DeleteMapElement(CFzip\Fichier(), GetFilePart(Fichier))
ProcedureReturn #True
EndIf
EndIf
;}
Else ;{ Mettre à jour ou ajouter l'entrée
*Fichier = CFzip\Fichier(GetFilePart(Fichier))
If *Fichier
SetXMLAttribute(*Fichier, "modifié", Str(GetFileDate(Fichier, #PB_Date_Modified)))
ProcedureReturn #True
Else
*NoeudPrincipal = MainXMLNode(#CFXmlZip)
If *NoeudPrincipal
*Noeud = CreateXMLNode(*NoeudPrincipal, "Contenu")
If *Noeud
SetXMLNodeName(*Noeud, "Fichier")
If aes
SetXMLAttribute(*Noeud, "type", #ExtFichierAES)
Else
SetXMLAttribute(*Noeud, "type", GetExtensionPart(Fichier))
EndIf
SetXMLAttribute(*Noeud, "modifié", Str(GetFileDate(Fichier, #PB_Date_Modified)))
SetXMLNodeText(*Noeud, GetFilePart(Fichier))
CFzip\Fichier(GetFilePart(Fichier)) = *Noeud
ProcedureReturn #True
EndIf
EndIf
EndIf ;}
EndIf
EndIf
ProcedureReturn #False
EndProcedure
;- ===== ConteneurFichiers =====
Procedure CFzip_CloseContainer()
; fermer ConteneurFichiers
CFzip_CloseContentXML() ; enregistrer contenu.xml
CFzip_ClearFileInfo() ; Réinitialiser Structure & Map
ProcedureReturn ClosePack(#CFPackZip)
EndProcedure
Procedure CFzip_OpenContainer(Container.s)
; Ouvrir conteneur de fichiers
CFzip_CloseContainer() ; peut comprendre conteneur ouvert
If FileSize(Container) > 0
If OpenPack(#CFPackZip, Container, #PB_PackerPlugin_Zip)
ProcedureReturn CFzip_OpenContentXML()
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_CreateContainer(Conteneur.s, Type.s, Info.s, Auteur.s)
; Créer un nouveau conteneur de fichiers
CFzip_CloseContainer() ; peut comprendre conteneur ouvert
If FileSize(Conteneur) < 0
If CreatePack(#CFPackZip, Conteneur, #PB_PackerPlugin_Zip)
CFzip_CreateContentXML(Type, Info, Auteur)
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
;- ===== Fichier dans ConteneurFichiers =====
Procedure CFzip_AddFile(Fichier.s)
; Ajouter un nouveau fichier dans le conteneur
If AddPackFile(#CFPackZip, Fichier, GetFilePart(Fichier))
ProcedureReturn CFzip_UpdateContentXML(Fichier)
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_RemoveFile(Fichier.s)
; Supprimer le fichier du conteneur
If RemovePackFile(#CFPackZip, GetFilePart(Fichier))
ProcedureReturn CFzip_UpdateContentXML(Fichier, #True)
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_CloseFile(Fichier.s)
; Fermer le fichier du conteneur
RemovePackFile(#CFPackZip, GetFilePart(Fichier))
If AddPackFile(#CFPackZip, Fichier, GetFilePart(Fichier))
CFzip_UpdateContentXML(Fichier)
DeleteFile(Fichier)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_OpenFile(Fichier.s, CheminCible.s="")
; Charger le fichier du conteneur
If CheminCible
If Right(CheminCible,1)<> "\" : CheminCible + "\" : EndIf
ProcedureReturn UncompressPackFile(#CFPackZip, CheminCible + GetFilePart(Fichier),
GetFilePart(Fichier))
Else
ProcedureReturn UncompressPackFile(#CFPackZip, Fichier, GetFilePart(Fichier))
EndIf
EndProcedure
; ----- fichiers cryptés AES -----
Procedure CFzip_AddFichierAES(Fichier.s, MotDePasse.s)
; Ajouter un nouveau fichier et le crypter
If CFzip_WriteAESPack(Fichier, MotDePasse)
ProcedureReturn CFzip_UpdateContentXML(Fichier, #False, #True)
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_RemoveFichierAES(Fichier.s)
; filtre à partir du conteneur de fichier chiffré
If RemovePackFile(#CFPackZip, GetFilePart(FileNoExtension(Fichier)+"."+#ExtFichierAES))
ProcedureReturn CFzip_UpdateContentXML(Fichier, #True, #True)
EndIf
ProcedureReturn #False
EndProcedure
Procedure CFzip_CloseFichierAES(Fichier.s, MotDePasse.s)
; Déplacer & crypter le fichier dans conteneur
RemovePackFile(#CFPackZip, GetFilePart(FileNoExtension(Fichier)+"."+#ExtFichierAES))
If CFzip_WriteAESPack(Fichier, MotDePasse)
CFzip_UpdateContentXML(Fichier, #False, #True)
DeleteFile(Fichier)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.s CFzip_OpenFichierAES(Fichier.s, MotDePasse.s, CheminCible.s="")
; Charger et décrypter le fichier du conteneur
ProcedureReturn CFzip_ReadAESPack(FileNoExtension(Fichier)+"."+#ExtFichierAES, MotDePasse,
CheminCible) ; Retour: Nom du fichier extrait
EndProcedure
;- ***** Exemple *****
; Créer un nouveau fichier CFzip (ConteneurFichiers)
If CFzip_CreateContainer("H:\Programmation\FichierTest.cfz", "monProg", "fichiers pour monProg",
"Michel Lye")
; Ajouter des fichiers
CFzip_AddFile("H:\Programmation\Test.txt")
CFzip_AddFichierAES("H:\Programmation\Test2.txt", "test")
; Afficher les informations de fichier par Map
ForEach CFzip\Fichier() ; lire tous les fichiers
Debug "Fichier (Map): " + MapKey(CFzip\Fichier())
*Noeud = CFzip\Fichier()
If *Noeud
Debug "Fichier (XML): " + GetXMLNodeText(*Noeud) + " (Type: " +
GetXMLAttribute(*Noeud, "type") + ")"
EndIf
Next
; Voir les informations du fichier en utilisant la Map directement
If CFzip\Fichier("H:\Programmation\Test2.txt") ; Fichier disponible en fichier CFzip?
*Noeud = CFzip\Fichier("H:\Programmation\Test2.txt")
If *Noeud
Debug "Fichier (XML): " + GetXMLNodeText(*Noeud) + " (Type: " +
GetXMLAttribute(*Noeud, "type") + ")"
EndIf
EndIf
Debug "Type fichier: "+CFzip_GetFileInfo("H:\Programmation\Test2.txt", "type") ; manière simple ;-)
CFzip_CloseContainer()
Else
Debug "Le fichier CFzip existe déjà!"
EndIf
; Ouvrir le fichier CFzip existant (ConteneurFichiers)
If CFzip_OpenContainer("H:\Programmation\FichierTest.cfz")
; accès direct à l'information sur le fichier CFzip
Debug "----- Fichier CFzip -----"
Debug "Type: " + CFzip\Type
Debug "Info: " + CFzip\Info
Debug "Auteur: " + CFzip\Auteur
; Ouverture du fichier
If CFzip_OpenFile("Test.txt", "H:\Programmation\")
; CFzip_OpenFile("Test.txt", "H:\Programmation\") = appel alternatif
Debug "fichier décompressé: "+Str(FileSize("H:\Programmation\Test.txt"))
;CFzip_CloseFile("H:\Programmation\Test.txt") ; Déplacer le fichier modifié dans le fichier CFzip
EndIf
If CFzip_OpenFichierAES("Test2.txt", "test", "H:\Programmation\")
Debug "Fichier décrypté et décompressé: "+Str(FileSize("H:\Programmation\Test2.txt"))
;CFzip_CloseFichierAES("H:\Programmation\Test2.txt", "test")
; Crypter le fichier de modification et revenir le fichier CFzip
EndIf
; il suffit de décompresser le fichier crypté
CFzip_OpenFile("Test2.acf", "H:\Programmation\") ; lisibilité fichier crypté (Et) Vérifié
CFzip_CloseContainer()
EndIf
Dernière modification par Micoute le dim. 31/août/2014 11:05, modifié 2 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Problème avec CreateXMLNode
CreateXML() Crée un objet XML vide. Mais ne crée pas le fichier sur disque.
Nul part dans ton code, tu sauvegardes ce fichier avec la commande SaveXML() comme je l'indique dans mon code exemple.
PS: je l'ai déja dit : Si je dois tester un code, je souhaite que ce code soit fonctionnel sans toucher quoi que ce soit. Je n'ai pas envie de passer mon temps à chercher et modifiers des noms de dossiers commeFournissez dans ce cas un zip fonctionnel !
Nul part dans ton code, tu sauvegardes ce fichier avec la commande SaveXML() comme je l'indique dans mon code exemple.
PS: je l'ai déja dit : Si je dois tester un code, je souhaite que ce code soit fonctionnel sans toucher quoi que ce soit. Je n'ai pas envie de passer mon temps à chercher et modifiers des noms de dossiers comme
Code : Tout sélectionner
*Noeud = CFzip\Fichier("H:\Programmation\Test2.txt")
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%