Tu peux t'inspirer de SearchBinaryInFile pour faire ta propre fonction !
SearchBinaryInFile est une approche générique !
Tu peux très bien faire un fonction genre SearchMes200InFile, faut juste que tu lui donne un nom métier !
Tu peux t'inspirer de SearchBinaryInFile pour faire ta propre fonction !
SearchBinaryInFile est une approche générique !
Tu peux très bien faire un fonction genre SearchMes200InFile, faut juste que tu lui donne un nom métier !
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
C'est bien ce que j'ai essayé de faire mais la fonction plante.
J'ai essayé de faire un FileSeek et un FileRead dans la fonction, juste après le stockage de l'offset. La fonction tourne en boucle mais ne s'arrête jamais...
Restaures-tu le curseur fichier à sa position initiale après avoir appliqué tes propres lectures ?
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Non je ne le replace pas, je ne sais pas comment le repositionner au bon endroit (il doit falloir sauver la valeur en cours et la réutiliser pour le replacement mais à quoi doit être égale la valeur en cours du curseur ?)
Utilise iReaded c'est la position du début du Buffer
Pour te repositionner au prochain buffer c'est iReaded + AmtTransferred;
ce qui donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if KeepOffSet then begin SetLength(OffSets, Length(OffSets) + 1); FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte" ShowMessage(PAnsiChar(@Toto[0]); FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer if AcceptOverlap then OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap else OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound; end;
Pense que tu peux aussi lire dans SearchBuf, si celui-ci contient suffisamment de données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 if KeepOffSet then begin SetLength(OffSets, Length(OffSets) + 1); if iSearch < AmtTransferred - SizeOf(Toto) then begin ShowMessage(Copy(StrPas(PAnsiChar(@SearchBuf[iSearch])), 1, SizeOf(Toto)) // attention au Caractère Zéro dans le binaire ! end else begin FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte" ShowMessage(PAnsiChar(@Toto[0]); // attention au Caractère Zéro dans le binaire ! FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer end; if AcceptOverlap then OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap else OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound; end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Merci beaucoup pour cette réponse, je teste ca dès demain
Merci pour la réponse, j'ai réussi à adapter ce que je voulais par contre j'ai été obligé de rajouter un FileSeek avant le FileRead et je n'ai pas le tout dernier offset (alors que je l'ai quand j'utilise la fonction normale) :
Edit : j'ai finalement fais cette modif et jca semble bien fonctionner pour le dernier Offset :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 if KeepOffSet then begin SetLength(OffSets, Length(OffSets) + 1); FileSeek(FileToSearch, OffSets[High(OffSets)-1] + Length(SearchBinary) , FILE_BEGIN); FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte" ShowMessage(PAnsiChar(@Toto[0]); FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer if AcceptOverlap then OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap else OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 if KeepOffSet then begin SetLength(OffSets, Length(OffSets) + 1); if AcceptOverlap then OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap else OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound; end; FileSeek(FileToSearch, OffSets[High(OffSets)] + Length(SearchBinary) , FILE_BEGIN); FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte" ShowMessage(PAnsiChar(@Toto[0]); FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager