Lecture d'un fichier binaire [Résolu]

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

3 réponses

Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
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]
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
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
Messages postés
28
Date d'inscription
mercredi 24 juin 2009
Statut
Membre
Dernière intervention
11 avril 2012

Merci Cirec, ca marche tres bien, merci