![]() |
Microsoft Word Datei erkennen (nicht über Dateiendung)
Hi Leute,
hat von euch jemand eine Idee, wie man erkennt ob es sich bei einer Datei um eine Worddatei handelt und das nicht über die Dateiendung. Mein Problem liegt nämlich darin, dass ich (wie sich vermuten läßt) eine Datei habe deren Endung nicht .doc ist und ich die richtige Endung setzen will. Achso, ich habe auch schon im Forum gesucht und auch mit Hilfe von Suchmaschinen, aber leider nix funktionierendes gefunden (so z.B. auch SHGetFileInfo, ...). Mfg Matthias |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
scahu mal bei
![]() |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Hi,
Zitat:
Wäre vielleicht hilfreich. :zwinker: MfG Marc |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
@Chegga:
Also die Dateiendung ist jetzt .obj, was aber eigentlich nicht weiterhilft und selbst vergeben ist. @All: Noch ein paar Erläuterungen meinerseits zu diesem Problem: 1. Ausgangspunkt ist ein Programm, welches Dateien archiviert und dabei die Einzeldateien zusammenfasst, d.h. eine große Datei daraus macht ( aus Performance und so ). Der Dateiname wird hierbei nicht mitgespeichert. 2. Beim herausholen der Dateien aus dem Archiv will ich nun aber den Dateityp (Endung) herausbekommen. Bei den meisten Dateiarten funktioniert das auch über ihre Kennung in der Datei, nur bei MS Office (Excel, Powerpoint, Word, ...) scheinbar nicht, da haben alle die gleiche Kennung. Eine Zuordnung der Dateiendung über eine Kennung ist da irgendwie nicht möglich. :? Mfg Matthias |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Hi Brainshock,
die Kennung der Datein kannst du dir über den(die?) CLSID holen. MS speichert in jeder Office-Datei die CLSID des Erstellungsprogramms, daher weiss die Explorer.exe bzw. das OS welche Anwendung mit der Datei geöffnet werden muss. Legt doch mal eine MS-Access Db mit OLE-Feldern an und speichere dort verschiedene Office-Dateien. Beim Doppelklick auf einen Datensatz erscheint das zugehörige Programm mit der Datei. |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
mhhhhhhh,
CLSID hab ich in der Worddatei gesucht, aber nicht gefunden. Da ich WinWord 2003 benutze habe ich in der Registry unter HKCR\Word.Application die CLSID {000209FF-0000-0000-C000-000000000046} genommen. Diese ID ist leider nicht mal ansatzweise in der vorher angelegten Worddatei. :( @Alter Mann: Ich hoffe nur, ich habe dich da richtig verstanden mit der CLSID. Idee? Mfg Matthias |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Die CLSIds werden wohl binär gespeichert, das heisst sie müssen auch in der Form ausgelesen werden, im Hex Editor sähe das z.B. so:
Code:
oder so:
FF 09 02 00 00 00 00 00 46 00 00 00 00 00 00 C0
Code:
aus, die Bytes sind verdreht (Stichwort
FF 09 02 00 00 00 00 00 C0 00 00 00 00 00 00 46
![]() ![]() PS: Ich bin mir auch nicht sicher, ob dies überhsupt die passende CLSID für diesen Zweck ist. |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
@scp:
Echt super (danke), ich habe zumindest einen Teil der CLSID so gefunden:
Code:
In der Datei steht zwar:
FF 09 02 00 00 00 00 00 46 00 00 00 00 00 00 C0
Code:
06 09 02 00 00 00 00 00 46 00 00 00 00 00 00 C0
mal sehen Mfg Matthias |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
|
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Hallo,
gehen wir mal davon aus, dass man man die AppID bei Word benutzen kann um diese Dateiart zu erkennen. Zumindest habe ich hier den Wert:
Code:
gefunden.
00 02 09 06 00 00 00 00 C0 00 00 00 00 00 00 46
Nur geht das Problem natürlich bei Excel weiter, hier finde ich jedenfalls nicht die AppID in der Datei. Ich habe hier nur die CLSID für ein Tabellenblatt gefunden und da weiss ich nicht, ob man das als eindeutiges Kriterium nutzen kann. mfg Matthias |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Ich würde dir empfehlen auch den Dateinamen oder zumindestens die Dateierweiterung im Archiv zu speichern. Damit umgehst du eine Menge Probleme. Du kannst nicht jeden Dateitypen exakt bestimmen.
|
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Na hi,
@jim_raynor: Danke, für deinen Hinweis, aber das hilft mir an dieser Stelle auch nicht weiter. Zumal ich der Meinung bin, dass es wenigstens bei MS Office Dateien möglich sein sollte diese aus irgendeiner Kennung zu bestimmen (es ging ja auch mit den alten Versionen). (So kommt man natürlich auch auf eine hohe Post-Zahl. :wink: ) @all: Hat sonst noch jemand irgendwelche Hinweise, wie man plausibel die MS Office Dateien bestimmen kann, also nix mit Dateiendung? mfg Matthias |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Du könntest (jetzt mal für Word als Bsp.) eine leere Datei machen und speichern, und anschließend eine Datei mit dem Inhalt "Text" machen und speichern. Nun kannst du die Dateien vergleichen, und Bereiche bestimmen, die immer gleich sind (die müsste es geben).
Greetz alcaeus |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Jede Datei hat doch einen Dateiheader in der drinne steht um was für einen Typ es sich handelt. Ein Beispiel ist "GIF89". Damit erkennt man, dass es sich um eine GIF-Datei handelt. So etwas müsste doch auch mit Word-Dateien gehen, wenn man den Header kennt.
André |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Hallo,
Man koennte auch mittels ![]() datei Handelt. |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Mhhh,
das mit dem Dateiheader ist mir schon klar, nur ist der bei allen MS Office Dateiarten gleich ( in den neuen Versionen). Das hilft mir also nicht besonders weiter und wäre nur eine sekundäre Kontrollmöglichkeit. @toms: Keine Ahnung was "StgOpenStorage" genau ist, aber ich schaue es mir mal an. Mfg Matthias |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Habe eine Gemeinsamkeit der Dateitypen gefunden, die Lösung liegt im Footer nicht im Header:
Am Ende beider Typen befindet sich ein sogenannter Root Entry, der auch passenderweise immer mit "R.o.o.t. .E.n.t.r.y." beginnt (die Punkte stehen hier für nullwertige Bytes). Bei Excel ist dieser 512 Bytes gross, bei Word 2048 Bytes. Bei beiden Typen kommt 80 Bytes nach "R.o.o.t. .E.n.t.r.y." die CLSID. Bei Word ist dies
Code:
un bei Excel
06 09 02 00 00 00 00 00 C0 00 00 00 00 00 00 46
{00020906-0000-0000-C000-000000000046} Microsoft Word-Dokument
Code:
PS: Getestet mit Office 97 und XP
00 02 08 20 00 00 00 00 C0 00 00 00 00 00 00 46
{00020820-0000-0000-C000-000000000046} Microsoft Excel-Arbeitsblatt |
Re: Microsoft Word Datei erkennen (nicht über Dateiendung)
Hallo,
da es nach wie vor bei den Office Dateien um sog. Compound Documents handelt würde ich versuchen über das IStorage Interface darauf zu zugreifen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz