Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Teile einer Datei löschen (https://www.delphipraxis.net/69351-teile-einer-datei-loeschen.html)

ErazerZ 14. Mai 2006 07:57


Teile einer Datei löschen
 
hey Leute,
ich hab da eine Frage und zwar sagen wir ich hab da eine Normale Datei die ist 1 MB groß, die möchte ich "trennen" also den Teil von 0,8 kopieren und 0,9 - 1,0 kopieren, also den teil zwischen 0,8 - 0,9MB entfernen, nun ja das wäre leicht mit ReadFile, WriteFile, jedoch wollt ich wissen obs ne andere möglichkeit gibt wenn ich die datei gemappt habe in den speicher
und noch eine frage bezüglich das, wie kann man Daten in einer Datei einfügen, nicht überschreiben, also obs einfacher geht anstatt alles zuerst kopieren und dann wieder beschreiben usw
(Die Datei ist gemappt im Speicher)

cya, ErazerZ

DevilsCamp 14. Mai 2006 08:11

Re: Teile einer Datei löschen
 
Zitat:

Zitat von ErazerZ
hey Leute,
und noch eine frage bezüglich das, wie kann man Daten in einer Datei einfügen, nicht überschreiben, also obs einfacher geht anstatt alles zuerst kopieren und dann wieder beschreiben usw
(Die Datei ist gemappt im Speicher)

cya, ErazerZ

EIgentlich sollte dafür ein eigener Thread aufgemacht werden (hat ja nichts mit der Thread-Übersicht zu tun).

Olli 14. Mai 2006 12:14

Re: Teile einer Datei löschen
 
Zitat:

Zitat von ErazerZ
jedoch wollt ich wissen obs ne andere möglichkeit gibt wenn ich die datei gemappt habe in den speicher

Anders ist das dann auch nur insofern, daß du eben mit "Speicher" hantierst statt direkt mit den Datei-APIs rumzufummeln.

Zitat:

Zitat von ErazerZ
und noch eine frage bezüglich das, wie kann man Daten in einer Datei einfügen, nicht überschreiben, also obs einfacher geht anstatt alles zuerst kopieren und dann wieder beschreiben usw
(Die Datei ist gemappt im Speicher)

Wüßte ich nicht. Du wirst schon zuerst den Block vor dem du etwas einfügen willst verschieben müssen und danach in den freigewordenen Platz deine neuen Daten schreiben. Aber sei dir versichert, wenn es effektiver geht, dann erledigt das das Dateisystem bereits für dich ;)

ErazerZ 15. Mai 2006 15:42

Re: Teile einer Datei löschen
 
ich meinte zb.
ich reserviere 1024 Bytes für eine Datei im speicher (wird gemappt und somit im speicher geladen wo ich sie bearbeiten kann), dann will ich jedoch an der stelle 512 - 10 bytes einfügen, also wird die neue dateigröße 1034, nun ja, da müsste man zuerst alle daten ab 512 in einem anderen pointer sichern und dannach die alten daten (ab position 512) mit den neuen 10bytes überschreiben und dann nochmals die alten daten aus dem gesicherten pointer ab stelle 522 schreiben - nun ja kompliziert ist das nicht wirklich, nur wie tut man speicher "neu reservieren" (also einfach verlängern oder verkürzen) die mittels MapViewOfFile gemappt wurde
hoffentlich hab ich mich jetzt einwenig besser ausgedrückt :)

franktron 15. Mai 2006 16:13

Re: Teile einer Datei löschen
 
Wenn ich das richtig verstanden hab dann nimm doch einfach TFileStream

himitsu 15. Mai 2006 16:16

Re: Teile einer Datei löschen
 
Der Teil wie man das bei einer gemappten Datei macht, würde mich och ma interessieren (kommt wohl bald auf mich zu -.-'')

ErazerZ 15. Mai 2006 16:50

Re: Teile einer Datei löschen
 
Zitat:

Zitat von franktron
Wenn ich das richtig verstanden hab dann nimm doch einfach TFileStream

das will ich ja vermeiden, auf der festplatte zu schreiben, ich wills direkt im speicher verändern und dann auf der disk ablegen :) - weil das wird dann noch zu kompliziert (ein teil im speicher, einen auf der disk usw.)

Klaus01 15. Mai 2006 16:56

Re: Teile einer Datei löschen
 
Wenn Du es eh abspeichern willst, kannst
Du dann nicht mit BlockWrite einen Buffer von 512Byte in die
Datei schreiben, dann einen Block von 10Byte und zum Schluß
noch die restlichen 512Byte.

Grüße
Klaus

franktron 15. Mai 2006 18:45

Re: Teile einer Datei löschen
 
Dann nim TMemoryStream :-D

ErazerZ 15. Mai 2006 18:58

Re: Teile einer Datei löschen
 
Zitat:

Zitat von franktron
Dann nim TMemoryStream :-D

ja wenn das mit Mapped Files nicht geht dann nehm ich eh das - danke, hab garnicht daran gedacht :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz