Entwickler-Ecke
Windows API - Erstellen grosser Dateien am Ende des freien Speiche der HD
GeriW - Di 25.10.05 12:09
Titel: Erstellen grosser Dateien am Ende des freien Speiche der HD
Wie kann ich mehrere grosse Dateien (z.B. 20MB Dateien) am Ende des freien Speicherplatzes einer HD oder partition erstellen?
Mit "CreateFile()" oder "NtCreateFile()" und "SetFilePointer()" müsste es doch gehen, oder?
Danke für Eure Mithilfe.
digi_c - Di 25.10.05 13:26
Ich glaub so einfach nicht.
In der letzten c't war ein Artiekel zum Thema Fragmentierung und da wurde darauf hingewiesen, dass es unter XP eine Defrag API gibt. Also kannst du vielleicht deine Datei normal erstellen und dann "von Hand" in die letzten Sektoren packen.
Ich rate davon ab das als Kopierschutz o.ä. einzusetzen, was hast du denn vor?
GeriW - Mi 26.10.05 10:20
Das Ganze ist etwas komplexer, als so wie es beschrieben ist.
Der Beitrag im c't 2005 Heft 21 habe ich auch gelesen.
Nur das mein Problem nur ein etwas klareres Bild ergibt. Aber trotzdem noch keine Lösung daraus ergibt.
Diese Dateien sollten "Platzhalter" sein und habe eigentlich nichts drin. Dieselben Dateien sollten auch nicht mehr verschoben werden können (z.B. mit dem Defragmentieren) und sollten selber auch nicht fragmentert sein. Weiter dürfen sie auch nicht vom MS Betriebsystem komprimiert werden dürfen.
Der Wurm liegt im Detail. Denn die Grundprinzipien sind klar. (Dateien erstellen, Berechtigungen setzen, ect.)
Die Frage ist viel mehr, wie und wo erstellt MS eine Datei und wie kann man sie überhaupt gegen das Fragmentieren schutzen (an einem Stück erstellt sein). Und sie dürfen danach auch nicht Defragmentiert und MS Betriebsystem komprimiert werden dürfen.
Also ein grosser Fragekatalog
Eine Möglichkeit sehe ich so:
1. Datei erstellen und gleich die Dateigrösse festlegen (Analog c't Heft)
2. Datei an seinen Bestimmungsort verschieben
3. Berechtigungen setzten
3. Datei mit "Null" Char füllen.
matze.de - Mi 26.10.05 10:43
Gehen muss es auf jeden Fall. Beim defragmentieren zeigter ja mit grün an "Nicht Verschiebbare Dateien" Ich glaube dazu zählt auch die "pagefile.sys" Das dürte als Beispiel für dein vorhaben nahe ran kommen.
mfg matze
GeriW - Mi 26.10.05 11:04
Das Defragmentieren von MS ist ein "undurchsichtige" Angelegenheit.
Das "PageFile.sys" und andere sind solche "grünen" Dateien.
Aber wie kann ich meine eigenen Dateien so Definieren am Zielort nach dem Erstellen?
digi_c - Mi 26.10.05 12:54
Ich habe keine Erfahrung mit NTFS naher Programmierung, bezweifle aber mal das es so einfach ist ein Flag "nicht defragmentieren" zu setzen.
Es gibt ja bei NTFS auch noch diese komischen Subfilestreams(keine Ahnung wie die genau heißen) vielleicht lässt sich dadurch was erreichen?
Nützlich dürften die Tools von
http://www.sysinternals.com/FileAndDiskUtilities.html sein, zumal die ja auch im Sourcecode vorliegen.
Delete - Do 27.10.05 16:38
Wozu brauchst du Platzhalter und warum dürfen die Dateien nicht in andere Cluster verschoben werden?
GeriW - Di 01.11.05 10:59
Diese Dateien sind Teil eines grossen Produkts.
Es sind so genannte "Platzhalter", damit ein Reinigungsprogramm diese benutzen kann.
Die Schwierigkeit liegt nicht im erstellen oder verschieben solcher Dateien, habe ich herausgefunden, sondern eigentlich, dass sie vom Betriebsystem als "nicht zu verschiebende Dateien" gelten. Also im klassischen Defragmentierungs-Tool als "grüne" Dateien erscheinen.
Der Code zur Erstellung und zur Verschiebung der "Platzhalter" Dateien ist noch in Bearbeitung.
Kommt später.
ripper8472 - Di 01.11.05 11:23
du kannst hoffen, dass du sie einmal erstellst mit nullchars und beim ueberscheiben die FS api die daten nicht auf andere sektoren verlagert. mehr auch nicht.
es gibt btw auch unter 2k schon so eine api. ich hab hier o&o defrag und das packts prima, auch wenn parallel auf der platte gearbeitet wird (alles apifunktionen, kein datenverlust, da ntfs ja angeblich journallingfaehig sein soll).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!