Lecture d'un fichier binaire [Résolu]

Messages postés
28
Date d'inscription
mercredi 24 juin 2009
Dernière intervention
11 avril 2012
- - Dernière réponse : cs_AgentAmine
Messages postés
28
Date d'inscription
mercredi 24 juin 2009
Dernière intervention
11 avril 2012
- 20 juil. 2011 à 17:47
Salut,

comment je peut lire les chaines delimiter par le code ascii NUL a partir de ce fichier binaire :



( Fichier : Luna.msstyles; ResType : FileResNames; ResName : 1 )

par exemple 1ere chaine est : NORMALBLUE_INI

  H:=Loadlibrary(Pchar(ThemeInfo.Style));
  if (FindResource(H, PChar('#1'), 'FILERESNAMES') <> 0) then
  begin
    Res:=TResourceStream.Create(H, '#1', 'FILERESNAMES');
    // ?????????? lire chaine
    Res.Free;
  end;


merci d'avance
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
3
Merci
Salut,

[quote= Caribensila]normalement un fichier de ressources se lit avec ReadComponentResFile/quote
je suis pas tout à fait d'accord avec ça !
ReadComponentResFile est plutôt fait pour charger d'autres type de ressources, genre fichier *.dfm ou autre flux de composants.

Mais pour le type de ressources *.res
TResourceStream s'y prête très bien ...

d'ailleurs voici un exemple:
pour les testes j'ai extrait le fichier en question de la ressource "luna.msstyles" et enregistré en "binary" donc en hexa et je l'ai chargé avec un TMemoryStream

Mais le principe ne change pas et la modification du code vers "TResourceStream" est très facile à faire:
[hr]
 procedure  TForm1.Button1Click(Sender: TObject);

[b]var
  /bMS: TMemoryStream;
  Data: PByte;
  DataBegin, DataEnd: Cardinal;
  aStr: string;
[b]begin
  /bMS : = TMemoryStream.Create;
  [b]try
    /bMS.LoadFromFile('1.bin');
    GetMem(Data, MS.Size);
    [b]try
      /bMS.ReadBuffer(Data^, MS.Size);
      DataBegin :=  Cardinal(Data);
      DataEnd := DataBegin + MS.Size;
       while  DataBegin < DataEnd [b]do
      begin
        /baStr : = PWideChar(DataBegin);
        Memo1.Lines.Add(aStr);
        Inc(DataBegin, Length(aStr) * 2 + 2);
      end;
    [b]finally
      /bFreeMem(Data);
    end;
  [b]finally
    /bMS.Free;
  end;
end;
[hr]
ah oui ...
ps: pour ce code il faut un TButton et un TMemo

[hr]@+Cirec
[hr]

Merci Cirec 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
Salut,

Ce que tu nous montres n'est pas un fichier binaire (qui, comme son nom l'indique, est composé de 1 et de 0).

Je ne sais pas ce que tu veux faire, mais normalement un fichier de ressources se lit avec ReadComponentResFile (Voir l'Aide Delphi).


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
Messages postés
28
Date d'inscription
mercredi 24 juin 2009
Dernière intervention
11 avril 2012
0
Merci
Merci Cirec, ca marche tres bien, merci
Commenter la réponse de cs_AgentAmine

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.