michi.wtr
Goto Top

Hinzufügen und manipulieren von Dateieigenschaften

Hallo zusammen, ich hätte da mal eine Frage...

Und zwar wurde ich während eines IT-Praktikums vom Chef gebeten ein Programm zu entwickeln (Sprache egal, selbst beherrsche ich Java ganz gut und bin gerade dabei mir Powershell ein wenig selbst beizubringen) welches:

1. die Eigenschaften von Dateien jeder Art (.txt, .xml, .pdf, ...) manipulieren kann, um somit z.B. eine Eigenschaft namens Autodelete mit boolschem Wert hinzuzufügen, um diese Datei zu markieren

2. die Dateien die mit in 1. hinzugefügten Informationen zu filtern um beispielsweise alle Dateien mit Autodelete = true und Erstellungsdatum > 5 vergangene Tage automatisch im angegebenen Verzeichnis + allen darunterliegenden Ordnern automatisch zu löschen


Teil 2 ist an sich kein Problem, mit Powershell lässt sich dies sehr einfach in einer einzelnen Kommandozeile erledigen, aber leider finde ich weder selbst noch im Netz die Möglichkeit, die Dateieigenschaften dahingehend zu bearbeiten, um eigene Informationen darin zu speichern (bestenfalls nicht im Explorer änderbar).

Zwar habe ich schon ein paar Powershell Skripte gefunden, die "ExtendedFileProperties" zu geladenen Dateien hinzufügen, jedoch sind diese Eigenschaften dann nur im Powershell Objekt sichtbar und temporär mit angeheftet und ich kann diese Informationen leider nicht in der endgültigen Datei speichern.

Gibt es dafür überhaupt die Möglichkeit und was wären Ansätze zur Lösung dieses Problems? Kann man überhaupt allen Dateien solche Eigenschaften hinzufügen? Sowohl Powershell als auch Java sagen mir beim bearbeiten der Eigenschaften immer diese sind nicht änderbar für eine Textdatei....


Vielen lieben Dank schonmal im Voraus face-smile

Content-Key: 3409319598

Url: https://administrator.de/contentid/3409319598

Printed on: April 18, 2024 at 05:04 o'clock

Member: colinardo
Solution colinardo Jul 22, 2022 updated at 08:44:25 (UTC)
Goto Top
Servus @michi.wtr, willkommen auf Administrator.de!

Lies dir bitte als erstes dazu folgende Links durch, diese sollten alle deine oben aufgeführten Fragen beantworten:
Property System Overview
Property System Code Samples
microsoft / Windows-classic-samples / PropertyEdit
microsoft / Windows-classic-samples

Kann man überhaupt allen Dateien solche Eigenschaften hinzufügen?
Das was du in Windows in den erweiterten Eigenschaften einer Datei angezeigt bekommst sind in der Regel sogenannte Property Handler und diese sind abhängig davon welche Dateierweiterung die Dateien haben. Die Handler werden einmalig im System registriert und stehen dann für die Interpretation der Daten aus der Datei zur Verfügung. Die Eigentlichen Daten kommen also aus der Datei selbst (außer die NTFS Eigenschaften zur Datei aus der MFT). Bietet also ein Dateityp keinen definierten Platz in seiner Datenstruktur bekommst du in dieser Datei keine "custom property" unter ohne das die Datei auf anderen Systemen nicht mehr valide ist oder als korrupt klassifiziert wird. Eine reine Plaintext-Datei ist so ein Fall, diese bietet in der Regel keinen Bereich in ihrer Daten-Struktur um darin weitere Eigenschafen zu speichern, dort ist quasi alles Text-Inhalt, und wenn du es trotzdem machen würdest würde ein Editor diese Informationen wohl direkt als Teil des Textes der Datei anzeigen.
Du kannst natürlich jederzeit dein eigenes Dateiformat entwickeln für das du einen Bereich für deine Eigenschaften in der Byte-Struktur vorsiehst und dann mit einem Property-Handler Windows den Zugriff zum Auslesen oder bei Bedarf auch zum Beschreiben dafür gibst.

Kurz und Knapp: Es kommt immer auf den Dateityp und installierten Handler an, ob überhaupt, oder wenn, welche Eigenschaften gelesen oder beschrieben werden können.

DMS Systeme als Beispiel zu nennen, speichern solche Informationen meistens nicht in der Datei selbst sondern in einer Datenbank/Alternate Data Stream und erweitern nur den Explorer um ein Interface welches die Datenbank und die Datei miteinander verknüpft. Das Speichern von eigenen Dateieigenschaften in der Datei selbst sollte man also bestenfalls nur für eigens entwickelte Dateitypen in Erwägung ziehen, denn du bist wie schon gesagt durch den unterschiedlichen Aufbau jedes Dateiformats abhängig davon ob der Dateityp überhaupt Platz für solche Eigenschaften in seiner Datenstruktur vorsieht.

Eine Lösung wäre also eine Datenbank für solche Eigenschaften vorzusehen die die Dateien mit den Eigenschaften aus der Datenbank verknüpft.

Eine andere Lösung dafür ist den NTFS Alternate Datastream für weitere Informationen zu nutzen. Das ist ein Datenbereich der für jede Datei im NTFS-Dateisystem zusammen mit einer Datei gespeichert wird (Die Streams kannst du auch in der Powershell nutzen). Hier bist du dann aber auf das Dateisystem angewiesen. Kopierst du dann die Dateien auf ein anderes Dateisystem ohne ADS-Stream Kompatibilität gehen diese Informationen verloren!

Grüße Uwe