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 Cependant si je lis le fichier à l'aide d'un à la fin de l'instruction Utilisation de l'utilisation, j'ai les valeurs variables suivantes: < / p> dont aucun ne commence avec les valeurs hexadécimales présentées dans le bloc-notes ++. p> est-il possible d'obtenir les octets d'origine à partir du résultat de la lecture d'un fichier via < Code> StreamReader CODE>? P> P> 1f 8b 08 code>. P>
StreamReader code>, je ne sais pas comment accéder aux octets d'origine .. p>
3 Réponses :
vous ne pouvez pas. Pour deviner si un fichier est un texte ou un binaire, vous pouvez lire le premier 4k dans un octet 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 code> coding code> est: c'est le seul em> moyen de convertir entre les caractères et les octets de manière sémantique. P> StreamReader CODE> est effectué pour lire le texte, non binaire. Utilisez le flux
code> directement pour lire les octets. Dans votre cas
filtream code>. P>
[] code> et interpréter cela. P>
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 p>
Utilisation (pour un fichier PDF): méthode getMagicnumbers: p>
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)