6
votes

Découvrez de manière programmative un type de fichier en regardant son contenu binaire. Possible?

J'ai un composant C # qui recevra un fichier des types suivants .doc, .pdf, .xls, .rtf

Ceux-ci seront envoyés par l'application Calling Siebel Legacy comme filtream.

SO ...

[LegacyApp] >> {flux de fichiers binaires} >> [composant]

L'application Legacy est une boîte noire qui ne peut pas être modifiée pour indiquer au composant quel type de fichier (DOC, PDF, XLS) est envoyé. Le composant doit lire ce flux binaire et créer un fichier sur le système de fichiers avec la bonne extension.

Des idées?

Merci pour votre temps.


0 commentaires

5 Réponses :


0
votes

sur Linux, il y a une commande appelée fichier code>. Compte tenu d'un fichier arbitraire, il tente de déterminer quel type de fichier c'est. Par exemple:

gzip compressed data, from Unix, last modified: Fri Jun 12 20:16:28 2009
HTML document text
vCalendar calendar file
RCS/CVS diff output text


1 commentaires

Je travaille sur un composant .NET qui sera déployé sur un environnement Windows.



0
votes

Yep. Voir Fichier .

et s'il vous plaît ne réinventez pas la roue. Ça marche bien comment c'est.


3 commentaires

Bien sûr, cette roue particulière fonctionne sous Linux. Pas la plate-forme commune à cibler avec C #.


@Jens - c'est une plate-forme inter-plate-forme, en fait. Pas le genre de plate-forme pour cibler avec C #.


Merci Jens, je regardais quelque chose comme une signature de fichier pour chacun de ces types que j'ai mentionnés.



8
votes

sur les systèmes basés sur Linux / Unix Vous pouvez utiliser la commande de fichier, mais je suppose que vous voulez le faire manuellement vous-même en code ...

Si tout ce que vous avez accès est le flux d'octets du fichier, vous auriez besoin de gérer chaque type de fichier de manière indépendante.

La plupart des programmes / composants qui font ce que vous vous demandez lisent généralement les premiers octets et effectuez une classification basée sur cela. Par exemple, les fichiers GIF commencent par l'une des opérations suivantes: GIF87A ou GIF89A

De nombreux formats de fichiers ont la même signature au début du fichier ou ont le même format d'en-tête. Cette signature est appelée Magie Numéro comme décrit par moi sur ce message .

Un bon endroit pour commencer est d'aller à www.wotsit.org . Il contient les spécifications de format de fichier interrogées par type de fichier. Vous pouvez consulter les types de fichiers importants que vous souhaitez gérer et voir si vous pouvez trouver un facteur d'identification dans ces formats de fichiers.

Vous pouvez également rechercher Google pour essayer de trouver une bibliothèque qui fait cette classification ou de regarder le code source de la commande de fichier.


1 commentaires

Si vous souhaitez gérer dans le code, oui vos seules options consiste à regarder les octets et à déterminer ce que le type de fichier est basé sur cela. La plupart des fichiers ont une sorte d'en-tête dans les premiers octets décrivant les données, le format, etc.



1
votes

Vous êtes peut-être intéressé par ce: http://en.wikipedia.org/wiki/ Magic_number_ (programmation)

La plupart des formats binaires contiennent un nombre magique à leur début. Si vous ne devez que reconnaître un certain ensemble de formats, il devrait être facile de vérifier les premiers octets d'un nouveau fichier entrant et de deviner correctement l'extension de fichier appropriée.


1 commentaires

Merci, mais le nombre magique semble être le même dans tous les fichiers MS Office (DOC, XLS, RTF). J'ai besoin de différencier les autres aussi.



2
votes

Oui, c'est possible, car les fichiers MS Office (97-2007 ou ThereBouts) Tout démarrez avec D0CF11E, puis il existe un marqueur de sous-type à l'octet 512.

Une référence pour ceux-ci est à: http://www.garykessler.net/library/file_sigs.html

Cela semble être la meilleure liste autour, avec toutes sortes de formats de fichiers - c'est la référence principale sur Wikipedia.

Il ne donne pas de détails complètes sur le nouveau format de bureau, c'est donc de mes propres exemples. Les fichiers DOCX commencent par "PK" (comme techniquement, ils sont des fichiers zip), puis contiennent la chaîne "Word / _rels / document.xml.rels" tandis que XLSX contient "XL / _rels / workbook.xml.rels".


0 commentaires