Alexander 'boesi' Bösecke wrote:
moin
Ist es moeglich in Dateien Daten an beliebiger Stelle einzufuegen, ohne das die vorhandenen Daten ueberschrieben werden? Und das mit einer Methode, die auch noch plattformuebergreifend funktioniert?
Nein. Oder soll das System die existierenden Daten auf der Platte rumschieben?
Die Größe der zu schreibenden Daten ist bekannt, also koennte ich ja die Datei vorm schreiben mit 0-Bytes auffuellen. Aber wie mach ich das?
Unter unix kannst du ein seek() über das Dateiende hinausmachen, wodurch automatisch alles bis zu deiner neuen Position mit \0 gefüllt wird. Das Dateisystem alloziert für Blocks (Grösse variiert), in die du nichts geschrieben hast, auch keinen Platz auf der Platte. Erst wenn du dort das erste mal tatsächlich etwas hinschreibst (und seien es lauter explizite \0), wird physikalisch Raum beansprucht. Unter anderen Systemen, und vielleicht auch bei einigen exotischen Dateisystemen unter unix, funktioniert das meines Wissens so nicht.
Das wuerde funktionieren, wenn ich die Datei vorm schreiben an der passenden Stelle teile und danach wieder zusammenfuege. Geht das ohne die Datei einzulesen (die Dateien koennen mehrere 100MB bis > 1GB gross sein)?
PS: die Größe der einzufuegenden Daten ist immer 1MB, falls das wichtig sein koennte.
Muss das wirklich eine einzelne grosse Datei sein? Würde es sich nicht anbieten, aus jedem dieser 1MB Stücke jeweils eine eigene Datei zu machen, und irgendwie einen Index darüber zu führen? Da scheint ja jedesmal eine in sich abgeschlossene "Einheit" Daten enthalten zu sein. Ob bei dieser Grösse der Overhead von zusätzlichen open()s noch/schon einen signifikanten Einfluss auf die Performance hat, müsstest du ggf. ausprobieren, das kann auch je nach System variieren. Die Suchbewegungen des Lesekopfes auf der Platte sind nach 1MB vernachlässigbar. Und bei denjenigen Dateisystemen, welche fragmentieren können, machst du dich vom aktuellen Zustand der Platte so auch weniger abhängig. -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de