Mailinglisten-Archive |
On Friday 20 February 2004 14:39, Martin Rozmus wrote: > Hallo liebe Liste, > > gibt es eine Möglichkeit, das Ende einer Datei explizit zu setzen? Ich habe > in meiner ASCII Tabelle den Hex-Wert 0x034 gefunden, was als 'file > separator' bezeichnet wird. > > Ich habe bereits in de.comp.lang.php.misc mein konkretes Problem > geschildert, deswegen werde ich es mal Zitieren (ich hoffe es verärgert > keinen): <Zitat Xref= de.comp.lang.php.misc:48130 > > [...] > > >>> (Oder?) Nun zu meiner Frage. Gibt es in PHP eine Möglichkeit, eine > >>> Datei an ihrem Ende um x Bits zu kürzen? > >>> Oder, wenn ich die Bits am Ende der Datei - oder an beliebeiger > >>> Stelle - mit NULL-Bits überschreibe, wird dann der Plattenplatz > >>> automatisch freigegeben? > > [...] > > >> str_replace( 'Bit' , 'Byte' , $quote ); > >> //In oberen Nachricht alle 'Bits' durch 'Bytes' ersetzen :-) > > [Lösungsvorschlag von Gustav Graf] > > > In diesem und für den einfachen Fall (Inhalt wird nach vorne geschoben): > > file_put_contents ($filename, substr (file_get_contents ($filename), > > $xBytesWeniger)); > > So einfach ist es nicht :-( . Ich greife gezielt auf bestimmte Positionen > in der Datei zu. D.h.: > > 1.) ich positioniere den Dateizeiger auf das erste Byte des Dateiblocks > 2.) ich lese temporär von da an eine bestimmte Menge an Bytes (x) --nennen > wir sie einen Datensatz-- in den Arbeitsspeicher ein. ( Im Arbeitsspeicher > liegt nun eine Kopie eines Abschnitts - eines Datensatzes - aus der Datei ) > 3.) ich verschiebe den Dateizeiger auf die neue Position des Datensatzes > 4.) ich schreibe von dort an den Datensatz der Länge x in die Datei > 0.) und das mit jedem Datensatz > > Um das mal 'grafisch' zu verdeutlichen: > > Annahmen & Erläuterungen: > | sei ein die Byteabfolge eines Datensatzes > > neue Position = alte Pos. - 1 > X überflüssiges Byte nach der Transformation > > Bytes: 1 2 3 4 5 6 7 8 EOF > vor Transformation: | | | | | | > nach Transform. | | | | | | X > > Da ich eine Kopie in die Datei geschrieben habe, hat das letzte Byte X den > Wert des letzten Bytes des Originals. > Ich kann es nun mit einem NULL Byte überschreiben, würde aber gerne das > Byte freigeben. D.h., dass es nicht mehr der Datei gehört > </zitat> Folgende Funktion macht das, was ich eigentlich erreichen wollte: http://de.php.net/manual/de/function.ftruncate.php Schönes Wochenende -- MfG Martin Rozmus martinrozmus at freenet.de
php::bar PHP Wiki - Listenarchive