Chargement d'un fichier binaire.
Chargement d'un fichier binaire.
Bonjour,
Je voudrais savoir si il est possible de chager rapidement un fichier et le mettre dans une variable, un peu comme avec VB. Enfin mettre un fichier complet dans une variable (le fichier fait a peu pres 15Mo).
Cordialement,
GallyHC
Je voudrais savoir si il est possible de chager rapidement un fichier et le mettre dans une variable, un peu comme avec VB. Enfin mettre un fichier complet dans une variable (le fichier fait a peu pres 15Mo).
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Chargement d'un fichier binaire.
Salut,
Les commandes de PB ne sont pas assez rapides?
Les commandes de PB ne sont pas assez rapides?
Code : Tout sélectionner
LoadFile(#Fichier, "fichier")
*Buffer = AllocateMemory(LoF(#Fichier))
ReadData(#Fichier, *Buffer, LoF(#Fichier))
Re: Chargement d'un fichier binaire.
Tu veux dire ReadFile ?cederavic a écrit :Salut,
Les commandes de PB ne sont pas assez rapides?Code : Tout sélectionner
LoadFile(#Fichier, "fichier") *Buffer = AllocateMemory(LoF(#Fichier)) ReadData(#Fichier, *Buffer, LoF(#Fichier))
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Chargement d'un fichier binaire.
Bonjour et merci,
Donc j'etais bien dans le vrai. IL y a juste un problème en récuperant le fihcier pour le mettre dans une variable par peeks(), des qu'il trouve un caractere Null il stop.
Voici un exemple qui charge la calculatrice :
En resultat on obtien que "MZ", mais le fichier est beaucoup plus gros. Comment faire pour résoudre ce problème?
Cordialement,
GallyHC
Donc j'etais bien dans le vrai. IL y a juste un problème en récuperant le fihcier pour le mettre dans une variable par peeks(), des qu'il trouve un caractere Null il stop.
Voici un exemple qui charge la calculatrice :
Code : Tout sélectionner
NomFichier$ = "c:\windows\system32\calc.exe"
Define i.l
Define j.l
Define bytes.i
Define result.s
Define *MemoryID.i
If ReadFile(0,NomFichier$)
*MemoryID =AllocateMemory(Lof(0))
If *MemoryID
bytes = ReadData(0, *MemoryID, Lof(0))
result = PeekS(*MemoryID, Lof(0))
FreeMemory(*MemoryID)
Debug result
EndIf
EndIf
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Chargement d'un fichier binaire.
Tu as Lof() , la longueur en byte du fichier
de là , tu fait un for/next , puis à coup de pokec() tu lis les caractères.
@+
de là , tu fait un for/next , puis à coup de pokec() tu lis les caractères.
@+
Re: Chargement d'un fichier binaire.
** edit **
je ne vois pas pourquoi je perd mon temps à essayer d'aider les gens ici
je ne vois pas pourquoi je perd mon temps à essayer d'aider les gens ici

Dernière modification par flaith le mar. 30/mars/2010 9:56, modifié 1 fois.
Re: Chargement d'un fichier binaire.
Salut G-Rom,
Autemps que je lise ligne par ligne et que je copie dans une variable, c pas plus rapide ni plus lent. Je ne comprend pas l'interrer d'arrête a un caractere null. Sutout pour charge de gros fichier.
Cordialement,
GallyHC
Autemps que je lise ligne par ligne et que je copie dans une variable, c pas plus rapide ni plus lent. Je ne comprend pas l'interrer d'arrête a un caractere null. Sutout pour charge de gros fichier.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Chargement d'un fichier binaire.
peeks() lis une chaine de caractère (comprendre par la du texte) terminée par un octet nul normalement il n'y a pas d'octet nul dans une chaine de caractères
toi tu lis du binaire donc peeks() ne conviens pas a cet usage
sinon une question me taraude , pourquoi tiens tu a lire un fichier binaire dans une variable ?
dans tout les cas si tu met un fichier binaire dans une chaine de caractere tu ne pourra jamais aller plus loin que le premier code null rencontré car toute les chaines de caractere en memoire sont terminées par un zero et ce independament du langage je crois
[quote=Grom]Tu as Lof() , la longueur en byte du fichier
de là , tu fait un for/next , puis à coup de pokec() tu lis les caractères.[/quote]
lire PEEKC() bien sur ^^
ceci dit, pour charger un fichier dans une string tu peux faire
physiquement le fichier sera dans la variable mais celle ci ne sera vu par pb que jusqu'au premier caractere nul rencontré...
un len(var\s) donnera toujours pareil 4...
enfin ca serait pas mal que tu nous dise le pourquoi du comment la je comprend pas l'utilité de faire cela alors qu'il existe des buffer memoires
toi tu lis du binaire donc peeks() ne conviens pas a cet usage
sinon une question me taraude , pourquoi tiens tu a lire un fichier binaire dans une variable ?
dans tout les cas si tu met un fichier binaire dans une chaine de caractere tu ne pourra jamais aller plus loin que le premier code null rencontré car toute les chaines de caractere en memoire sont terminées par un zero et ce independament du langage je crois
[quote=Grom]Tu as Lof() , la longueur en byte du fichier
de là , tu fait un for/next , puis à coup de pokec() tu lis les caractères.[/quote]
lire PEEKC() bien sur ^^
ceci dit, pour charger un fichier dans une string tu peux faire
Code : Tout sélectionner
var.string
rd=ReadFile(#PB_Any,"calc.exe")
var\s=space(lof(rd))
ReadData(rd,@var\s,lof(rd))
CloseFile(rd)
un len(var\s) donnera toujours pareil 4...
enfin ca serait pas mal que tu nous dise le pourquoi du comment la je comprend pas l'utilité de faire cela alors qu'il existe des buffer memoires

Re: Chargement d'un fichier binaire.
Je vais tenter d'expliquer la chose,
GallyHC corrige si je me trompe.
En gros on a un fichier binaire dans le quel il y a des string genre "toto", "bibi".
Le but est donc de chercher à charger en mémoire le fichier binaire comme une suite de caractères afin de rechercher les termes "toto" ou "bibi" directement dans la mémoire.
GallyHC corrige si je me trompe.
En gros on a un fichier binaire dans le quel il y a des string genre "toto", "bibi".
Le but est donc de chercher à charger en mémoire le fichier binaire comme une suite de caractères afin de rechercher les termes "toto" ou "bibi" directement dans la mémoire.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Chargement d'un fichier binaire.
si c'est juste pour une recherche il faut procéder autrement
Code : Tout sélectionner
Procedure findmem(*buffer,st.s,start=0)
string.string
string\s=st
size=Len(st)-1
pos=0
Repeat
If PeekC(*buffer+pos)<>PeekC(@string\s)
pos+1
Else
lpos=0
Repeat
If PeekC(*buffer+pos+lpos)=PeekC(@string\s+lpos)
lpos+1
Else
pos+1
Break 1
EndIf
Until lpos=size
If lpos=size
ProcedureReturn pos
EndIf
EndIf
Until pos=MemorySize(*buffer)
ProcedureReturn -1 ; ERREUR
EndProcedure
file$=OpenFileRequester("","*.*","*.*",1)
If FileSize(file$)>0
*mem=AllocateMemory(FileSize(file$))
rd=ReadFile(#PB_Any,file$)
If rd
ReadData(rd,*mem,Lof(rd))
CloseFile(rd)
EndIf
search$=InputRequester("memsearch","entrez une chaine","")
If search$<>""
pos=findmem(*mem,search$)
If pos=-1
Debug "erreur"
Else
Debug pos
EndIf
EndIf
FreeMemory(*mem)
EndIf
Re: Chargement d'un fichier binaire.
Bonjour,
Voila Ar-s a bien explique et merci a toi case pour ce code. Il faudrais maintenant que l'on puisse recupere les parties de memoire qui ce trouve entre x et y trouvais par ta fonction.
Cordialement,
GallyHC
Voila Ar-s a bien explique et merci a toi case pour ce code. Il faudrais maintenant que l'on puisse recupere les parties de memoire qui ce trouve entre x et y trouvais par ta fonction.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Chargement d'un fichier binaire.
oOGallyHC a écrit :Bonjour,
Voila Ar-s a bien explique et merci a toi case pour ce code. Il faudrais maintenant que l'on puisse recupere les parties de memoire qui ce trouve entre x et y trouvais par ta fonction.
Cordialement,
GallyHC
je ne comprend pas bien ce que tu veux faire, ca serais pas mal que tu nous en dise un peu plus .
la on avance en aveugle et en plus il faut deviner ce que tu cherches a faire ,)
récupérer des parties, dans quel but ? les sauver sur disque ? les mettre dans une autre zone mémoire? les afficher ? ce n'est pas des choses tres compliquer mais encore faut il savoir exactement ce que tu veux.
Re: Chargement d'un fichier binaire.
J'ose qd même répondre, la différence en y et x, tu alloues de la mémoire de la taille de cette différence et du fait un copymemory dans ce nouveau bloc mémoire
Re: Chargement d'un fichier binaire.
GallyHC a écrit :Salut G-Rom,
Autemps que je lise ligne par ligne et que je copie dans une variable, c pas plus rapide ni plus lent. Je ne comprend pas l'interrer d'arrête a un caractere null. Sutout pour charge de gros fichier.
Cordialement,
GallyHC
ReadString() ? Autant utilisé ReadData() ou à coup de PeekC() ( Merci Ar-s ^^ )
PeekC() te permettais d'avoir une valeur Ascii , si tu rencontre un Zero , tu l'ignores (met en un à la fin quand même) , comme ca dès lors que tu appelles
Debug MaVar$ , tout est lu , et sa ne s'arrête pas au premier #Null rencontré.