Gibt es eine einfache Möglichkeit, den Typ einer Datei zu ermitteln, ohne die Dateierweiterung zu kennen?

7

Ich habe eine Tabelle mit einer binären Spalte, die Dateien einer Reihe von verschiedenen möglichen Dateitypen (PDF, BMP, JPEG, WAV, MP3, DOC, MPEG, AVI usw.) speichert, aber keine Spalten, die entweder den Namen oder speichern der Typ der Originaldatei Gibt es eine einfache Möglichkeit für mich, diese Zeilen zu verarbeiten und den Typ jeder in der Binärspalte gespeicherten Datei zu bestimmen? Vorzugsweise würde es ein Dienstprogramm sein, das nur die Dateiköpfe liest, so dass ich nicht jede Datei vollständig extrahieren muss, um ihren Typ zu bestimmen.

Klärung : Ich weiß, dass hier nur der Anfang jeder Datei gelesen wird. Ich suche nach einer guten Quelle (aka Verbindungen), die das für mich ohne zu viel Aufhebens tun können. Danke.

Auch nur C # /. NET unter Windows, bitte . Ich verwende kein Linux und kann Cygwin nicht verwenden (funktioniert unter anderem nicht mit Windows CE).

    
MusiGenesis 25.11.2008, 21:11
quelle

7 Antworten

8

Sie können diese Tools verwenden, um das Dateiformat zu finden.

Dateianalysator Ссылка

Welches Format? Ссылка

PE-Dateiformatanalysator Ссылка

Diese Website kann für Sie hilfreich sein. Ссылка

Hinweis: Ich habe die Download-Links hinzugefügt, um sicherzustellen, dass Sie den richtigen Tool-Namen und Informationen erhalten.

Bitte überprüfen Sie die Quelle, bevor Sie sie herunterladen.

Ich habe ein Tool in der Vergangenheit verwendet, ich denke, es ist File Analyzer, die Ihnen die beste Übereinstimmung sagen wird.

Happy Tooling.

    
sundar venugopal 25.11.2008, 21:31
quelle
6

Dies ist keine vollständige Antwort, aber ein Platz zum Starten wäre eine "magische Zahlen" -Bibliothek. Dabei werden die ersten paar Bytes einer Datei untersucht, um eine "magische Zahl" zu ermitteln, die mit einer bekannten Liste verglichen wird. Dies ist (zumindest teilweise) der Befehl file auf Linux-Systemen.

    
Paul Fisher 25.11.2008 21:14
quelle
4

Jemand anders hat eine ähnliche Frage gestellt und den Code gepostet, um genau dies zu tun. Sie sollten in der Lage sein, das, was hier gepostet wird, zu nehmen und es leicht so zu modifizieren, dass es aus Ihrer Datenbank zieht.

Ссылка

Zusätzlich dazu sieht es so aus, als ob jemand eine Bibliothek geschrieben hat, die auf magischen Zahlen basiert, aber es sieht so aus, als ob die Seite eine Registrierung erfordert, und eine Art alternativer Zugang, um diese lirbary herunterzuladen. Die Dokumentation ist kostenlos ohne Registrierung verfügbar, das kann hilfreich sein.

Ссылка

    
Bob 25.11.2008 21:28
quelle
2

Der einfachste Weg, den ich kenne, ist der Datei -Befehl, der auch in Windows mit Cygwin .

    
Fernando Miguélez 25.11.2008 21:14
quelle
1

Viele Dateitypen haben gut definierte Header, die die Datei beginnen. Sie könnten die ersten paar Bytes überprüfen, um zu sehen, wie die Datei beginnt.

    
jjnguy 25.11.2008 21:15
quelle
1

Der einfachste Weg, dies zu tun, wäre der Zugriff auf ein * nix (oder cygwin) System mit dem Befehl 'file':

%Vor%

Sie könnten eine C # -Anwendung schreiben, die die ersten X Bytes jeder Binärspalte an den Dateibefehl weiterleitet (mit - als Dateiname)

    
thelsdj 25.11.2008 21:15
quelle
1

Sie müssen einen p / invoke Interop-Code verwenden, um die SHGetFileInfo Methode aus der Win32-API. Dieser Artikel kann ebenfalls hilfreich sein.

    
Scott Dorman 25.11.2008 23:11
quelle