Typ von Dateien ohne Dateiendungen ermitteln

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Typ von Dateien ohne Dateiendungen ermitteln

    Hallo Leute,

    Beispiel: Man nehme unterschiedliche Dateien (Textdateien, Access-Datebankdateien, PDFs, Word Dateien, JPGs, ...) und versehe sie mit ein und der selben Dateiendung oder mit keiner Endung (egal).

    Wie kann man von einer vorliegenden Datei dann auslesen was diese für eine Datei ist?
    Wenn ich z.B. eine Datei Namens "Testdatei" habe. Diese könnte entweder ein Word-Dokument sein oder ein Bild oder auch ein einfaches Textdokument.
    Gibt es da irgend eine .NET Funktion die diese Information aus dem Dateiheader auslesen könnte?

    Oder muss ich die Dateien manuell öffnen, die ersten paar Zeichen auslesen und dann daraus ermitteln was das für eine Datei ist?

    Vielen Dank für Eure Tipps.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 Das wird schwer bis unmöglich.
    Manche Dateien, insbesondere Bilder, beginnen mit sogenannren Magic Bytes, daran können sie unterschieden werden.
    Benenne ein Bild falsch und öffne es im Irfan-View, der schlägt vor, es korrekt umzubenennen.
    Setzt aber voraus, dass eine Irfan-bekannte Endung vorliegt.
    Wir haben diverse binär serialisierte Klassen im Einsatz, da wird eine Exception geworfen, wenn die Klase nicht passt, und man kann die nächste probieren.
    Also:
    Mach eine Liste aller erlaubten Formate und versuch die der Reihe nach einzulesen (Misserfolg oder Exception).
    Wenn kein passendes Format gefunden wird, war es keine erlaubte Datei.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    In meinen Augen sollte es kein großes Problem sein, den Dateityp zu erkennen.

    Siehe z. B. stackoverflow.com/questions/58…ile-signature/58570#58570
    oder die Liste der Dateiheader unter en.wikipedia.org/wiki/List_of_file_signatures
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Vielen Dank Euch beiden.

    Die Version von @RodFromGermany ist zwar nicht die "sauberste" aber für das was ich brauche eh die einzig sinnvolle Variante.

    Zur Erklärung:

    Ich habe alle meine Daten für mein Projekt unter einer einzigen Dateiendung abgespeichert. Egal ob Textdatei, serialisiertes Datenstruct oder Access-MDB Datenbank.
    Das habe ich deswegen so gewählt, damit Kunden nicht in den Dateien "herumstochern". Bei dieser Anwendung ist dies nicht gewollt und kein Kunde soll die Dateien direkt bearbeiten können.

    Nun haben es Access-Datenbanken so an sich, dass die mit der Zeit auch beim Löschen von Datensätzen nicht kleiner werden und man diese "Komprimieren und Reparieren" muss.
    Dazu habe ich eine altbewährte Funktion schon 2014 in eine Software integriert.

    Nun mache ich es so wie von @RodFromGermany empfohlen und Komprimiere einfach alle entsprechenden Dateien. Wenn es sich um keine Access-Datenbank handelt, dann übergibt mir die Funktion 0, andernfalls die komprimierte Dateigröße.

    Warum ich nicht einfach eine Liste mit den zu komprimierenden Dateien führe? Weil ich zum aktuellen Zeitpunkt weder Anzahl noch Dateinamen dafür habe. Hier möchte ich sehr flexibel sein.
    Da diese Funktion vielleicht einmal im Jahr aufgerufen wird (also nichts was man täglich macht), ist das so praktikabel.

    Die Idee von @Marcus Gräfe ist zwar grundsätzlich die bessere, aber aktuell zu viel Aufwand für mich.

    Ideal wäre es gewesen, wenn es eine .NET Funktion dafür gäbe. Aber so geht es auch.

    LG und vielen Dank
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 Von was für Dateien reden wir denn?
    ====
    OK.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Warum den Dateien nicht einfach ne eigene Dateiendung verpassen?
    Z.b. Statt Datenbank.mdb -> Datenbank.c3po
    Dann weißt du was für eine Datei dahinter steckt
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen