Lecture d'un fichier binaire [Résolu]

Messages postés
28
Date d'inscription
mercredi 24 juin 2009
Statut
Membre
Dernière intervention
11 avril 2012
- - Dernière réponse : cs_AgentAmine
Messages postés
28
Date d'inscription
mercredi 24 juin 2009
Statut
Membre
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 

3 réponses

Meilleure réponse
Messages postés
4208
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 août 2019
32
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]

Dire « Merci » 3

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

Codes Sources 125 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
12
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
Statut
Membre
Dernière intervention
11 avril 2012
0
Merci
Merci Cirec, ca marche tres bien, merci
Commenter la réponse de cs_AgentAmine