2010-05-27 5 views
5

J'ai un composant C# qui recieve un fichier des types suivants .doc, .pdf, .xls, .rtfRecherche par programme un type de fichier en regardant son contenu binaire. Possible?

Ceux-ci seront envoyés par l'appelant app héritage siebel comme filestream.

Alors ...

[LegacyApp] >> {flux de fichier binaire} >> [Composant]

L'application héritée est une boîte noire qui ne peut pas être modifié pour dire le composant ce type de fichier (doc, pdf, xls) c'est l'envoi. 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.

Répondre

7

Sur les systèmes Linux/Unix, vous pouvez utiliser la commande de fichier, mais je suppose que vous voulez faire vous-même manuellement dans le code ...

Si tout ce que vous avez accès à est le flux d'octets du fichier, alors vous devrez gérer chaque type de fichier indépendamment.

La plupart des programmes/composants qui font ce que vous demandez habituellement lisent les premiers octets et font une classification basée sur cela. Par exemple, les fichiers GIF commencent par l'un des suivants: 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 référencée magic number as described by me on this post.

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

Vous pouvez également effectuer une recherche dans Google pour essayer de trouver une bibliothèque qui effectue cette classification ou consulter le code source de la commande de fichier.

+0

Merci. va regarder dans ce – user20358

+0

Si vous voulez gérer le code, oui, vos seules options est de regarder les octets et comprendre quel est le type de fichier sur cette base. La plupart des fichiers ont une sorte d'en-tête dans les premiers octets décrivant les données, le format, etc. – Justin

0

Sous Linux, il existe une commande appelée file. Étant donné un fichier arbitraire, il tente de déterminer de quel type de fichier il s'agit. 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 

Ceux-ci proviennent de quelques fichiers aléatoires situés autour de mon répertoire personnel.

+0

Je travaille sur un composant .net qui sera déployé sur un environnement Windows. – user20358

0

Oui. Voir file.

Et s'il vous plaît ne pas réinventer la roue. Cela fonctionne très bien comment c'est.

+2

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

+0

@Jens - C'est multi-plateforme, en fait. Pas le genre de plate-forme à cibler avec C#. – amphetamachine

+0

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

1

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

La plupart des formats binaires contiennent un nombre magique à leur début. Si vous devez seulement 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 l'extension de fichier appropriée.

+0

Merci, mais le nombre magique semble être le même sur tous les fichiers MS Office (doc, xls, rtf). J'ai besoin de faire la différence entre ceux-ci aussi. – user20358

1

Oui, cela est possible, car les fichiers MS Office (97-2007 ou à peu près) commencent tous par D0CF11E, puis il y a un marqueur de sous-type sur 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 - il est la principale référence sur wikipedia.

Il ne donne pas de détails complets sur le nouveau format Office, donc c'est de mes propres exemples. Les fichiers DOCX commencent par "PK" (car techniquement, ce sont des fichiers zip), puis contiennent la chaîne "word/_rels/document.xml.rels" tandis que XLSX contient "xl/_rels/workbook.xml.rels".

Questions connexes