Lecture d'un fichier binaire [Résolu]

cs_AgentAmine 28 Messages postés mercredi 24 juin 2009Date d'inscription 11 avril 2012 Dernière intervention - 18 juil. 2011 à 20:19 - Dernière réponse : cs_AgentAmine 28 Messages postés mercredi 24 juin 2009Date d'inscription 11 avril 2012 Dernière intervention
- 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
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 juil. 2011 à 02:50
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Cirec
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 18 juil. 2011 à 22:34
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
cs_AgentAmine 28 Messages postés mercredi 24 juin 2009Date d'inscription 11 avril 2012 Dernière intervention - 20 juil. 2011 à 17:47
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.