Lecture d'un fichier binaire

Résolu
cs_AgentAmine Messages postés 28 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 11 avril 2012 - 18 juil. 2011 à 20:19
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

3 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
19 juil. 2011 à 02:50
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]
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
18 juil. 2011 à 22:34
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
0
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
Merci Cirec, ca marche tres bien, merci
0
Rejoignez-nous