2008-11-25 8 views
7

J'ai une table avec une colonne binaire qui stocke des fichiers d'un certain nombre de différents types de fichiers possibles (PDF, BMP, JPEG, WAV, MP3, DOC, MPEG, AVI etc.), mais pas de colonnes qui stockent le nom ou le type du fichier d'origine. Y at-il un moyen simple pour moi de traiter ces lignes et de déterminer le type de chaque fichier stocké dans la colonne binaire? De préférence, il s'agirait d'un utilitaire qui lit uniquement les en-têtes de fichiers, de sorte que je n'ai pas à extraire complètement chaque fichier pour déterminer son type.Existe-t-il un moyen facile de déterminer le type d'un fichier sans connaître l'extension du fichier?

Clarification: Je sais que l'approche consiste à lire seulement le début de chaque fichier. Je suis à la recherche d'une bonne ressource (aka liens) qui peut le faire pour moi sans trop d'histoires. Merci.

En outre, juste C# /. NET sur Windows, veuillez. Je n'utilise pas Linux et ne peux pas utiliser Cygwin (ne fonctionne pas sous Windows CE, entre autres raisons).

Répondre

8

vous pouvez utiliser ces outils pour trouver le format de fichier.

Analyseur de fichier http://www.softpedia.com/get/Programming/Other-Programming-Files/File-Analyzer.shtml

Quel format http://www.jozy.nl/whatfmt.html

analyseur de format de fichier PE http://peid.has.it/

Ce site peut être utile pour vous. http://mark0.net/onlinetrid.aspx

Remarque: J'ai inclus les liens de téléchargement pour m'assurer que vous obtenez le bon nom d'outil et les bonnes informations.

veuillez vérifier la source avant de les télécharger.

J'ai utilisé un outil dans le passé je pense que c'est File Analyzer, qui vous dira la correspondance la plus proche.

joyeux outillage.

+0

Merci pour les liens. Je vais les vérifier tous. – MusiGenesis

6

Ce n'est pas une réponse complète, mais un point de départ serait une bibliothèque de "nombres magiques". Cela examine les premiers octets d'un fichier pour déterminer un "nombre magique", qui est comparé à une liste connue d'entre eux. C'est (au moins une partie) de la façon dont fonctionne la commande file sur les systèmes Linux.

+0

Ce sera assez complet pour moi si vous pouvez me diriger vers une bonne bibliothèque comme celle-ci. – MusiGenesis

+0

Recherchez/usr/share/file/magic,/etc/magic ou d'autres emplacements similaires sur une distribution linux ou unix. Comme le dit l'autre affiche, vous pouvez également l'obtenir avec cygwin – ConcernedOfTunbridgeWells

+1

-1 downvote temporaire (je vais l'enlever dans un peu). J'ai besoin de quelque chose pour .NET, et parfois sur des questions comme celle-ci, 1000 personnes verront "file" et "Linux" et une réponse upvote qui empêchera les spectateurs d'en remarquer d'autres. rien de personnel. :) – MusiGenesis

2

La manière la plus simple que je connaisse est d'utiliser la commande file qui est également disponible sous Windows avec Cygwin.

1

Beaucoup de types de fichiers ont des en-têtes bien définis qui commencent le fichier. Vous pouvez vérifier les premiers octets pour vérifier comment le fichier commence.

1

meilleure façon de faire ce serait grâce à l'accès à un * système nix (ou Cygwin) qui a la commande « file »:

$ file visitors.* 
visitors.html: HTML document text 
visitors.png: PNG image data, 5360 x 2819, 8-bit colormap, non-interlaced 

Vous pouvez écrire une application C# qui canalisé les premiers octets X de chaque colonne binaire à la commande de fichier (en utilisant - comme nom de fichier)

4

Quelqu'un d'autre a posé une question similaire et a posté le code utilisé pour faire exactement cela. Vous devriez être en mesure de prendre ce qui est posté ici, et légèrement le modifier afin qu'il tire de votre base de données.

https://stackoverflow.com/questions/58510

En plus de cela, il semble que quelqu'un a écrit une bibliothèque basée hors des nombres magiques pour ce faire, cependant, il semble que le site nécessite une inscription, et une certaine forme d'accès alternatif pour Téléchargez ce lirbary. La documentation est disponible gratuitement sans inscription, ce qui peut être utile.

http://software.topcoder.com/catalog/c_component.jsp?comp=13249160&ver=2

+1

Ce lien topcoder ne permet pas le téléchargement, même après un processus d'enregistrement minable - ne vous approchez pas! – Brendan

1

Vous devez utiliser un code d'interopérabilité p/invoke pour appeler la méthode SHGetFileInfo à partir de l'API Win32. Ce article peut également aider.

+0

Je pense que cela retournera tout ce que le serveur pense que le type de fichier est (ce qui sera probablement OK), alors que j'ai besoin d'une méthode qui détermine le même type de fichier quel que soit le serveur sur lequel il s'exécute. – MusiGenesis

+0

Oui, il retournera ce que le serveur pense que le type de fichier est. C'est la même information que vous verriez dans Windows Explorer pour la colonne "Type". La seule façon de savoir sur un serveur est d'écrire votre propre routine d'analyse pour regarder l'extension de fichier, les données PE et les en-têtes de fichiers. –

Questions connexes