Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 13.08.03 19:51
Hallo,
ich möchte irngenwie eine datei am format erkennen ohne auf die endung zu achten.
gibt es da ideen wie man das machen könnte ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
UC-Chewie
      
Beiträge: 531
WinXP
D5 Ent
|
Verfasst: Mi 13.08.03 19:57
Willst du ein beliebiges Format erkennen oder zwischen einer begrenzten Zahl unterscheiden können?
Ersteres düfte wohl ein Ding der Unmöglichkeit sein, da eine Datei ja einfach nur eine Art Datenblock ist, ohne externe Beschreibungsmechanismen (abgesehen von Dateiname, Endung etc., aber dieser Weg ist sehr unsicher, wie du selbst gemerkt hast). Und jede Datei kann ihren Header oder wo auch immer sieDaten enthält, die die Strukturr beschreiben, speichern, wo auch immer sie will bzw. sie braucht so etwas gar nicht zu enthalten. Deswegen wirst du abgesehen von der Unterscheidung Textdatei <-> Binärdatei nicht viel erreichen.
Etwas anders siehts aus, hast du beispielsweise einen Mediaplayer, der 4 veerschiedene Dateiformate lesen kann. Dort kannst du die verschiedenen Muster auf die Datei anwenden und schauen, welches Muster auf die Datei passt.
Je mehr Muster - je mehr Arbiet und Rechenzeit.
_________________ Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 13.08.03 20:13
was meinst du mit muster ?
ich habe folgendes vor:
eine funktion zu schreiben die einen das format als string zu rückgib.
ich dachte mir jetzt folgendes:
bmp und midi sind ja recht einfach zu bestimmen.
aber text und mod dateien, wie woll man sie erkennen ?
könntes du mir mal ein beispiel mit dem muster machen ?
das könnte ne lösung sein...
habe schon im internet gesucht, aber leider nichts genaues gefunden 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 14.08.03 14:30
kennt wer dokus oder tutors die dieses thema beschreiben,
und die in deusch sind ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: So 17.08.03 02:17
Also bei Text-Dateien könntest Du so vorgehen.
TXT-Dateien sollten nur Text beinhalten, d.h. nur Zeichen, die von der Tastatur erzeugt werden können. Die CL/CR Zeichen müssen auch einbezogen werden, da diese ja den Zeilenumbruch signalisieren.
Also alle Zeichen unter ASCII 32 sind Steuerzeichen, die nicht in einem Textfile vorkommen sollten (außer wie gesagt #13 und #10).
Da die meisten TXT-Files recht klein sind, empfiehlt es sich, die komplette Datei Zeichen für Zeichen zu prüfen, ob die Zeichen in das Raster passen.
Wenn ein #2-Zeichen dabei sein sollte, ist es unwahrscheinlich, dass es noch eine Text-Datei ist, vor allem, wenn das erste Zeichen kein Textzeichen ist, sollte Dein Prog "stutzig werden" und es als non-txt ausweisen.
MOD-Files kenne ich vom Aufbau her nicht
Dann sind da noch die header-spez. Signaturen.
Am Anfang steht:
BM für Bitmap
PK für ZIP
RAR für RAR
RIFF für AVI, WAVE usw.
bei JPEG ist es eine gewisse Zeichenfolge (aber auch fest definiert, 6 Zeichen lang - siehe wotsit.org)
bei GIF sind die ersten 4 Zeichen immer "GIF8" (entweder GIF89 oder GIF87)
usw.
Das begrenzt die Anzahl der zu lesenden Bytes (und damit den Aufwand) auf ein Minimum und erhöht dadurch die Geschwindigkeit des Algorithmus.
Sicher gehen kann man natürlich nie, da ja eine Datei nie einen vorgeschriebenen Inhalt haben muss.
Eine Text-Datei kann ja auch mit RAR anfangen.
Beispiel:
RAR is geil!
das könnte eine Text-Datei sein (alles sind Text-Zeichen)
es könnte aber auch eine RAR-Datei sein (die ersten 3 Buchstaben sind "RAR")
Also 100%ig geht's nimmer.
Eine Routine, die alle Typen umfasst, gibts nicht - ein Format muss immer definiert sein - ansonsten sind es Rohdaten - also RAW, was in dem Sinne eigentlich kein Datei-Format ist.
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 17.08.03 09:47
wie kann man sich diese datei raster/muster am besten vorstellen ?
weil dies sind doch die beste möglichkeit eine datei sicher zu erkennen oder ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: So 17.08.03 14:46
Naja, Du weißt etwa, dass "BM" am Offset 0 vorkommen muss, oder das JFIF (im JPEG File) an einer bestimmten Stelle im File vorkommen muss - diese Stellen musst Du kennen - das ist dann Dein "Muster."
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 17.08.03 15:35
hilft mir auch nicht recht weiter, weil das wort bm kann ja auch in einer normalen text dateien stehen:
bmp ist.....
z.b.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: So 17.08.03 18:19
Naja, auf welche Formate kannst Du Dich denn beschränken?
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mo 18.08.03 15:29
*.MID
*.MP3
*.MP2
*.Wav
*.MOD
*.S3M
*.IT
*.XM
*.BMP
*.JPEG
*.JPG
*.Text
*.Doc
*.*
wie du sehen kannst auf garkeins....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Mo 18.08.03 22:30
Hallo!
DaRkFiRe hat folgendes geschrieben: | Also alle Zeichen unter ASCII 32 sind Steuerzeichen, die nicht in einem Textfile vorkommen sollten (außer wie gesagt #13 und #10). |
Da gibt es auch noch TAB! Das ist #$09 (bei Chars bevorzuge ich nunmal sedezimal, sonst #9 schreiben) und kommt in Textdateien öfter mal vor!
Gruß
Dietmar Brüggendiek
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Di 19.08.03 01:55
Naja, es soll Experten geben, die auch andere Steuerzeichen verwenden. Also ausschließen kann man heutzutage eh nix mehr.
Zu der Erkennung: wow - also wenn man alles erkennen will, wenn man das Format nicht mal kennt, dann hast Du Dir was ernsthaft schwieriges, ja absolut unmögliches beschränken. Worin liegt denn das Problem? Was soll das für ein Programm werden? Kann es Kompromisse geben?
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 19.08.03 15:08
Zitat: |
ja absolut unmögliches beschränken
|
unmöglich ist das nicht, siehe linux
ich habe ein arichver geschrieben wo ich nur TFielStream genutz habe.
es sind alle funktionen vorhanden damit umzugehen:
Löschen, hinzufügen, von dateien zu einem arichv kein problem
man kann auch dateien auslesen ohne das sie auf der festplatte geschrieben werden(TMemoryStream).
jetzt wollte ich nur diese funktion nutzen um ein datei betrachte zu schreiben.
diese dateibetracht muss folgendes wissen:
1. Welche gruppe gerhört diese datei an(Multimedia, Grafik, Text)
2. Sie muss das format kennen damit man bestimmen kann mit welcher funktion die datei angezeigt werden kann.
ich hoffe ihr versteht das problem, natürlich kann ich auch auf die endung achten aber das ist ja "langweilig".
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Di 19.08.03 16:39
Ich kann Dir versichern - selbst Linux beschränkt sich dabei auch nur auf bekannte Dateitypen.
Denn wenn es nicht so wäre, und es selbst ein unbekanntes Format identifiziert, es einen Namen verpasst, den es nicht mal kennt - das wäre eine intelligente Maschine und ich glaube nicht, dass Linux eine KI hat.
BTW: Wie läuft denn das bei Linux - ich hab Linux lange Zeit nich mehr aufgespielt!?
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 19.08.03 18:00
ich kenne es auch nicht, mein vater hat es mir gesagt...
Zitat: |
und ich glaube nicht, dass Linux eine KI hat.
|
es gibt eine datei da stehene alle dateiformate ab und sie können sie blitzt schnell vergleichen.
da stehen ca 500 - 1000 formate drin vileicht noch mehr
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Di 19.08.03 20:47
Naja, da werden auch nur die markanten Muster drin stehen, Signaturen, Header usw. - das meinten wir ja auch alle vorher.
Linux ist doch IMHO Open-Source - da sollte der Source offen sein - vielleicht kann man sich da etwas abgucken.
Wie das Linux mit Text-Dateien macht, würd ich auch gern wissen...
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 20.08.03 16:02
für textdateien gibt es ja nur eine lösung:
die datei ziechen für zeichen durchgehen und schauen ob sie "Assic" sind kenne jetzt den zeichensatzt nicht....
wie sehen denn solche musster aus?
könnts du mal ein beispiel geben ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
kasi
      
Beiträge: 37
Win XP
D5 Ent
|
Verfasst: Do 21.08.03 17:40
Schau mal unter www.filext.com/detaillist.php, dort werden auch Identifying Characters angegeben, soweit vorhanden.
KASI
Zuletzt bearbeitet von kasi am Do 21.08.03 18:44, insgesamt 1-mal bearbeitet
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 21.08.03 17:52
kann ich leider nichts mit anfangen, habe die seiten mit google übersetzt *g*
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
kasi
      
Beiträge: 37
Win XP
D5 Ent
|
Verfasst: Do 21.08.03 18:06
Kann so schwer nicht sein, auch ohne Englisch zu können.
Du gibst in das Edit Feld oben eine Erweiterung ein. z.B. GIF
Drückst Return un erhälst in der Tabelle unter
Identifying Characters folgendes
Hex: 47 49 46 38
ASCII: GIF8
or for GIF87a...
Hex: 47 49 46 38 37 61
ASCII: GIF87a
or for GIF89a...
Hex: 47 49 46 38 39 61
ASCII: GIF89a
Gif-Dateien beginnen mit einer dieser 3 Sequenzen
etc.
KASI[/b]
|
|