AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Truncate/SetEndOfFile, verhindern das Datei genullt wird
Thema durchsuchen
Ansicht
Themen-Optionen

Truncate/SetEndOfFile, verhindern das Datei genullt wird

Ein Thema von Sunlight7 · begonnen am 14. Jan 2009 · letzter Beitrag vom 14. Jan 2009
Antwort Antwort
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#1

Truncate/SetEndOfFile, verhindern das Datei genullt wird

  Alt 14. Jan 2009, 05:12
Moin DP!

Mich nervt gerade das Problem, das mir (große) Dateien immer genullt werden, was mir zu lange dauert, für meine Zwecke unnötig ist und meine Nerven strapaziert...

Ums auf den Punkt zu bringen hab ich einen Test QT gemacht:
Delphi-Quellcode:
   var F:File;
    i:Cardinal;
    PC:Array[0..65535] of Char;
begin
   AssignFile(F, 'L:\~Test.tmp');
   ReWrite(F, 1);
   i:=1 * 1024 * 1024 * 1024;
   Seek(F, i+65536);
   Truncate(F);
   Seek(F, i);
   BlockWrite(F, PC, 65536); // Hier haben wir das Die-Lämmer
   CloseFile(F);
end;
Sobald ich Daten ans Ende der Datei schreibe wird die komplette Datei von Anfang bis FilePos genullt und erst dann die eigentlichen Daten geschrieben...

Ich habs versucht, die Datei (mit der Größe) zu erstellen, schließen, öffnen und dann ans Ende schreiben, aber das half nix, sie wurde wieder genullt

Dann hab ichs direkt mit der WinAPI versucht, aber auch da war der selbe Effekt


Wie kann ich ans Ende einer Datei schreiben ohne das alles davor genullt wird?


MfG, Sun
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: Truncate/SetEndOfFile, verhindern das Datei genullt wird

  Alt 14. Jan 2009, 09:33
Zitat:
Dann hab ichs direkt mit der WinAPI versucht, aber auch da war der selbe Effekt
Die Delphi-Funktionen greifen fast direkt auf die WinAPI zu und dieses hier ist nunrmal ein Verhalten dieser API.


Truncate entspricht sozusagen MSDN-Library durchsuchenSetEndOfFile

Seit WinXP gibt es MSDN-Library durchsuchenSetFileValidData, aber selbst hatte ich dieses, aus Sicherheitsgründen und da ich es Schlußendlich doch anders gelößt hab, am Ende doch nicht verwendet
Zitat von MSDN:
Warning Use of this function without proper security considerations may compromise data privacy and security.
Ich glaub bei der ganzen Sache mußt du auch noch mit einberechnen, ob die Datei komprimiert (MSDN-Library durchsuchenFILE_ATTRIBUTE_COMPRESSED) ist, da es (glaub ich) die Datengröße auf der Platte setzt (ist schon 'nen Weilchen her, wo ich damit gespielt hatte)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Truncate/SetEndOfFile, verhindern das Datei genullt wird

  Alt 14. Jan 2009, 10:57
Hallo,
Zitat von Delphi-Hilfe:
Rewrite (Prozedur)
Die Prozedur erstellt eine neue Datei und öffnet sie anschließend.
Da dürfte das Problem liegen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

Re: Truncate/SetEndOfFile, verhindern das Datei genullt wird

  Alt 14. Jan 2009, 11:33
nee, sobald man die Datei vergrößert ... wie auch immer (außer man schreibt über das Dateiende hinaus und vergrößert so), wird "immer" mit 0 gefüllt ... damit kommen "normale" Programme nicht an alte Dateidaten/Datenstrukturen auf der Platte ran, indem sie einfach 'ne Datei erstellen und schauen was drin ist ... Datensicherheit halt
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#5

Re: Truncate/SetEndOfFile, verhindern das Datei genullt wird

  Alt 14. Jan 2009, 19:40
Oha, Danke für den Tipp, mit SetFileValidData klappt das wirklich

Obs ein Problem gibt, wenn die Dtei komprimiert ist guck ich noch.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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