7
votes

Nombre de fichiers originaux de StreamReader, détection de numéro magique

J'essaie de différencier les fichiers "Fichiers texte" et "Binarys", car je voudrais effectivement ignorer les fichiers avec "illisible" contenu.

J'ai un fichier que je crois est une archive GZIP. Je suis en train d'ignorer ce type de fichier en détectant les numéros magiques / la signature de fichier. Si j'ouvre le fichier avec le plugin d'éditeur hexagonal dans le bloc-notes ++, je peux voir que les trois premiers codes hexagosur sont 1f 8b 08 .

Cependant si je lis le fichier à l'aide d'un StreamReader , je ne sais pas comment accéder aux octets d'origine .. xxx

à la fin de l'instruction Utilisation de l'utilisation, j'ai les valeurs variables suivantes: < / p> xxx

dont aucun ne commence avec les valeurs hexadécimales présentées dans le bloc-notes ++.

est-il possible d'obtenir les octets d'origine à partir du résultat de la lecture d'un fichier via < Code> StreamReader ?


3 commentaires

Il suffit de tester les octets dans le tableau des octets, vous n'avez pas besoin de tout ce genre de chaîne


Le problème est (malgré l'exemple ci-dessus), je commence par une chaîne (que je connaisse a été produite par un streamerrisseur) et j'espérais ne pas avoir à modifier la manière dont la chaîne a été fournie. Cette réponse semble indiquer qu'il est possible d'obtenir les octets originaux d'une chaîne .. Qu'est-ce que je manque?


1f que vous voyez dans votre lecteur hexagonal est 31 converti en 49 (x31) ('1') et 70 (x46) 'F' Char (X1F) est en ASCII le Char américain (séparateur d'unité) d'une non imprimable comme Echable ou cloche. Donc, si vous recherchez les octets après avoir convertir efficacement les caractères, vous devez rechercher du char (X1F) Char (8b) Char (8)


3 Réponses :


2
votes

vous ne pouvez pas. StreamReader est effectué pour lire le texte, non binaire. Utilisez le flux directement pour lire les octets. Dans votre cas filtream .

Pour deviner si un fichier est un texte ou un binaire, vous pouvez lire le premier 4k dans un octet [] et interpréter cela.

BTW, vous avez essayé de forcer des caractères en octets. Ceci est invalide par principe. Je vous suggère de vous familiariser avec quel coding est: c'est le seul moyen de convertir entre les caractères et les octets de manière sémantique.


0 commentaires

7
votes

Votre code essaie de modifier un tampon binaire en une chaîne. Les chaînes sont unicode en net si deux octets sont nécessaires. Le résultant est un peu imprévisible comme vous pouvez le voir.

Utilisez simplement un binaryreader et son relookbytes méthode xxx


0 commentaires

6
votes

Utilisation (pour un fichier PDF): xxx

méthode getMagicnumbers: xxx


0 commentaires