Lazarus: Charger Fichier en tant que Array d'Octets et Enregistrer Array d'Octets en tant que Fichier
Tutoriel de Stefan Trost | Dernière mise à jour le 18/02/2023 | Créé le 02/04/2021
Dans ce didacticiel, je veux vous montrer comment lire un fichier octet par octet dans un array et comment réécrire un array d'octets dans un fichier.
Tout d'abord, nous définissons un tableau d'octets dont nous avons besoin pour les deux processus respectivement directions:
type TByteArr = array of Byte;
Nous pouvons maintenant le remplir avec quelques octets individuels, par exemple de la manière suivante:
var BA: TByteArr; begin SetLength(BA, 3); BA[0] := 65; BA[1] := $41; BA[2] := %1000001;
Ce faisant, peu importe si nous spécifions les octets en notation décimale, hexadécimale ou binaire ou si nous les obtenons d'une fonction comme ord(), par exemple. L'exemple de code montre chacune de ces quatre possibilités.
65 est le code ASCII pour "A". En notation hexadécimale, le nombre 65 correspond à 41 et en notation binaire à 1000001. Aussi ord('A') nous donne la valeur ASCII 65 pour "A".
En conséquence, dans l'exemple, nous définissons les quatre octets du tableau sur la même valeur. Les valeurs décimales peuvent être écrites sous forme de nombres entiers simples dans le code tandis que les valeurs hexadécimales doivent être marquées par $ et les nombres binaires par %. De cette façon, le compilateur peut distinguer de quel nombre nous parlons.
Enregistrer Tableau d'Octets
Voyons maintenant comment nous pouvons enregistrer notre tableau d'octets dans un fichier. Pour cela, nous utilisons la procédure suivante, à laquelle nous pouvons transmettre un tableau d'octets et le nom de fichier souhaité pour le stockage:
procedure SaveByteArray(AByteArray: TByteArr; const AFileName: string); var AStream: TStream; begin if FileExistsUTF8(AFileName) then DeleteFileUTF8(AFileName); AStream := TFileStreamUTF8.Create(AFileName, fmCreate); try AStream.WriteBuffer(Pointer(AByteArray)^, Length(AByteArray)); finally AStream.Free; end; end;
Tout d'abord, nous vérifions si un fichier avec le nom spécifié existe déjà et le supprimons si c'est le cas. Alternativement, nous pourrions bien sûr également demander à l'utilisateur avant de supprimer le fichier existant, mais ici nous voudrions nous limiter à l'essentiel. Ensuite, nous créons un FileStream et y écrivons le tableau dans toute sa longueur dans ça. Avec cela, le tableau d'octets est enregistré.
Un exemple d'utilisation peut ressembler à ceci:
var BA: TByteArr; begin SetLength(BA, 1); BA[0] := 65; SaveByteArray(BA, 'fichier.dat');
Ici, nous créons d'abord un tableau d'octets composé de deux éléments, puis nous utilisons la procédure qui vient d'être présentée pour le stockage. Comme premier paramètre, nous passons notre tableau d'octets à la procédure, comme deuxième paramètre le nom de fichier souhaité.
Charger un Tableau d'Octets
Maintenant, nous voulons également voir le chemin inverse. Pour charger un fichier du disque dur dans un tableau d'octets, nous pouvons utiliser la fonction suivante, à laquelle nous pouvons passer un nom de fichier comme paramètre:
function LoadByteArray(const AFileName: string): TByteArr; var AStream: TStream; ADataLeft: Integer; begin SetLength(result, 0); if not FileExistsUTF8(AFileName) then exit; AStream := TFileStreamUTF8.Create(AFileName, fmOpenRead or fmShareDenyWrite); try AStream.Position := 0; ADataLeft := AStream.Size; SetLength(result, ADataLeft div SizeOf(Byte)); AStream.Read(PByte(result)^, ADataLeft); finally AStream.Free; end; end;
Toujours dans cette procédure, d'abord, nous vérifions si un fichier existe sous le nom de fichier spécifié et nous terminons si ce n'est pas le cas. Auparavant, nous avions déjà défini le résultat sur une longueur de 0, donc la fonction renvoie un tableau vide dans ce cas. Si le fichier existe, nous créons également un FileStream dans cette fonction, que nous utilisons pour lire tous les octets du fichier dans notre tableau d'octets de résultat.
Un appel à la fonction peut ressembler à ceci:
var BA: TByteArr; begin BA := LoadByteArray('fichier.dat');
Nous passons uniquement un nom de fichier cpmme paramètre et récupérons le tableau d'octets composé des octets du fichier demandé.
Visualiser Tableau d'Octets
Lorsque vous travaillez avec des tableaux d'octets, la question de l'affichage du contenu du tableau d'octets se pose tôt ou tard. Il est logique de générer les tableaux d'octets sous forme hexadécimale sous forme de chaîne / string. Par exemple, une sortie du tableau d'octets mentionné ci-dessus ressemblerait à ceci: "41 41 41 41".
Sur l’Auteur
Vous pouvez trouver des logiciels de Stefan Trost sur fr.sttmedia.com. Avez-vous besoin d'un logiciel personnalisé selon vos propres besoins? Écrivez-nous: fr.sttmedia.com/contact
Voir Profil
Sujets Connexes
MySQL: Sauts de Ligne dans MySQL
Conseil | 0 Commentaires
Delphi/Lazarus: Afficher Array d'Octets sous forme de Chaîne de Valeurs HEX
Conseil | 0 Commentaires
Script Batch: Arrêter Ordinateur Windows
Tutoriel | 4 Commentaires
Renommer des Fichiers en ses Noms de Dossier
Tutoriel | 0 Commentaires
jQuery: Lire et Modifier les Valeurs d'Attributs Data
Tutoriel | 0 Commentaires
VirtualBox: Changer la Date et l'Heure
Tutoriel | 10 Commentaires
CSS: Comment inclure CSS dans HTML
Tutoriel | 0 Commentaires
Avis Important
Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.
Participer
Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.