hallo,
da ich hier neu bin, habe ich mir gleich ein nettes problem einfallen lassen.
folgendes:
ich möchte aus einem phyton script herraus (external method in zope) die Dateiinformationen einer Datei auslesen.
Die dateiinformationen (Title, Thema, Kategorie, Stichwörter und Kommentar) sind im Eigenschaftsmenü einer Datei unter Dateiinfo abrufbar.
Es sollen Dateien auf einer webseite zum download angeboten werden. zusätzlich sollen diese/einige Dateiinformationen angezeigt werden.
Das speichern der infos ermöglichen die ADS (alternate data streams) im NTFS dateisystem. der Datenstrom mit den infos heißt: ♣SummaryInformation
codiert: \005SummaryInformation
Die oben aufgezählten infos sind alle hintereinander in den datastream geschrieben. Das macht das auswerten schwer, da keine anhaltspunkte für stringoperationen gegeben sind.
ich suche nun nach einer möglichkeit diese informationen auszulesen. vielleicht gibt es ja versteckte funktionen die gleich eine liste oder ähnliches ermitteln
mfg uwe
ntfs streams auslesen
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hilft dir vielleicht das weiter:
http://www.python-forum.de/viewtopic.php?t=2306
vielleicht auch interessant:
http://www.python-forum.de/viewtopic.php?t=2292
http://www.python-forum.de/viewtopic.php?t=2306
vielleicht auch interessant:
http://www.python-forum.de/viewtopic.php?t=2292
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Diese Informationen sind doch nicht in ADS drin.. sondern in den EXEn, damit das auch auf FAT Dateisysthemen funktioniert. Dazu solltest du dir den ersten Link ansehen, den jens gepostet hat.Anonymous hat geschrieben:Das speichern der infos ermöglichen die ADS (alternate data streams) im NTFS dateisystem. der Datenstrom mit den infos heißt: ♣SummaryInformation
codiert: \005SummaryInformation
Eine Möglichkeit ADS direkt aus Python zu lesen kenne ist jedoch nicht, ich habe nur ein paar Tools gefunden, die man per os.system() bedienen könnte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
(bin author, war nicht angemeldet.)
also:
die summary informationen welche ich meine sind in ad-streams abgelegt.
es handelt sich um die ads, welche nur auf einem NTFS volume verfügbar sind.
unter http://www.heysoft.de/Frames/f_sw_la_de.htm lässt sich ein tool downloaden, welches die ads namen anzeigt.
in python mittels test.txt:\005SummaryInformation (normaler dateiaufruf) liefert:
also sind alle dateiinfos (nicht die versionsnummern etc...) in diesem ADS.
werde wegen dem hässlichem format also doch os.system nehmen müssen.
mfg uwe
also:
die summary informationen welche ich meine sind in ad-streams abgelegt.
es handelt sich um die ads, welche nur auf einem NTFS volume verfügbar sind.
unter http://www.heysoft.de/Frames/f_sw_la_de.htm lässt sich ein tool downloaden, welches die ads namen anzeigt.
Code: Alles auswählen
LADS - Freeware version 4.00
(C) Copyright 1998-2004 Frank Heyne Software (http://www.heysoft.de)
This program lists files with alternate data streams (ADS)
Use LADS on your own risk!
Scanning directory c:\daten\
size ADS in file
---------- ---------------------------------
120 c:\daten\test.txt:♣DocumentSummaryInformation
252 c:\daten\test.txt:♣SummaryInformation
0 c:\daten\test.txt:{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}
Code: Alles auswählen
þÿ à…ŸòùOh«‘ +'³Ù0 Ì 8 €@ H \ p € ä test.txt information test A beschreibung asdlfsdf lk asjf asdfjö sdaflj
werde wegen dem hässlichem format also doch os.system nehmen müssen.
mfg uwe
hm,
jetzt finde ich vor schreck gar kein command-line tool welches die infos ausließt.
besser währe natürlich ein rundll oder sonstwas aufruf, welcher auch windows intern beim lesen/setzen der dateiinfos ausgeführt wird.
hat jemand eine idee?
nachtrag:
habe mal mitgeloggt, was so auf der platte los ist, wenn man so einen eintrag setzt:
allerlei aufrufe der docprop und docprop2.dll von explorer.exe
die export functione der dlls sind:
docprop.dll:
DllCanUnloadNow
DllGetClassObject
docprop2.dll
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
docprop klingt ja schon so schön nach document attributen
jetzt finde ich vor schreck gar kein command-line tool welches die infos ausließt.
besser währe natürlich ein rundll oder sonstwas aufruf, welcher auch windows intern beim lesen/setzen der dateiinfos ausgeführt wird.
hat jemand eine idee?
nachtrag:
habe mal mitgeloggt, was so auf der platte los ist, wenn man so einen eintrag setzt:
allerlei aufrufe der docprop und docprop2.dll von explorer.exe
die export functione der dlls sind:
docprop.dll:
DllCanUnloadNow
DllGetClassObject
docprop2.dll
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
docprop klingt ja schon so schön nach document attributen
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Vielleicht ist http://www.sysinternals.com/Utilities/Streams.html für dich interessant... Da sind auch C-Sourcecodes dabei
das stream tool von sysinternals hillft mir nicht weiter, weil dieses nur streams erkennt und dessen namen anzeigt.
damit habe ich auch den stream namen SummaryInformation herausgefunden.
Es funktioniert auf absolut niedrigster dateisystemebene.
dem tool ist auf deutsch schei* egal, was in den einzelnen streams steht.
man kann sich den inhalt eines beliebigen strings nicht anzeigen lassen und schon gar nicht die aufgeschlüsselten summary informationen.
der C-Source hilft mir deswegen auch nicht.
damit habe ich auch den stream namen SummaryInformation herausgefunden.
Es funktioniert auf absolut niedrigster dateisystemebene.
dem tool ist auf deutsch schei* egal, was in den einzelnen streams steht.
man kann sich den inhalt eines beliebigen strings nicht anzeigen lassen und schon gar nicht die aufgeschlüsselten summary informationen.
der C-Source hilft mir deswegen auch nicht.
Der Beitrag ist zwar uralt, aber falls jemand googelt so wie ich, hier die Antwort: Einfach den Namen des Streams mit Doppelpunkt getrennt hinter dem Dateinamen anhängen.
Beispiel:
Ausgabe:
Beispiel:
Code: Alles auswählen
import os
print "Create MyFile.txt"
with open("MyFile.txt", "w") as file:
file.write("MyFile contents")
print "Create MyFile.txt:MyStream"
with open("MyFile.txt:MyStream", "w") as stream:
stream.write("MyStream contents")
print "Read MyFile.txt:MyStream:",
with open("MyFile.txt:MyStream", "r") as stream:
print stream.read()
print "Delete MyFile.txt:MyStream"
os.remove("MyFile.txt:MyStream")
print "Read MyFile.txt:",
with open("MyFile.txt", "r") as file:
print file.read()
print "Delete MyFile.txt"
os.remove("MyFile.txt")
Create MyFile.txt
Create MyFile.txt:MyStream
Read MyFile.txt:MyStream: MyStream contents
Delete MyFile.txt:MyStream
Read MyFile.txt: MyFile contents
Delete MyFile.txt
Funktionen:
Code: Alles auswählen
def readNtfsStream(fileName, streamName):
with open(fileName + ":" + streamName, "r") as stream:
return stream.read()
def writeNtfsStream(fileName, streamName, contents):
with open(fileName + ":" + streamName, "w") as stream:
stream.write(contents)
def deleteNtfsStream(fileName, streamName):
os.remove(fileName + ":" + streamName)
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ja, die Info's gibt es auch hier: https://secure.wikimedia.org/wikipedia/ ... ms#Windows
Frage mich gerade, wie man eine Liste der existierenden ADS bekommen kann...
Frage mich gerade, wie man eine Liste der existierenden ADS bekommen kann...