![]() |
IdHTTP Stream Problem
Hallo zusammen,
Ich habe ein vermutlich kleines aber sehr ärgerliches Problem. Ich versuche momentan einen Auto-Updater zu schreiben der einmal am Tag auf dem Server nach einer neuen Version sucht. Leider tauchte hierbei ein Problem auf:
Code:
Ich habe heute versucht mit dem Programm bewusst ungewöhnlich große Dateien zu laden (300MB+). Sobald der Download startet, erhält das "Dummyfile" bereits seine entgültige Filesize. Das bedeutet: auch wenn erst 1 MB übertragen ist, ist die Datei bereits 300MB groß. Das ist für meine Zwecke allerdings sehr ärgerlich, da es im falle eines fehlerhaften Downloads z.b. durch Stromausfall die Komponente zerstören würde und ein automatisches Reparieren verhindert (Da Dateigrößen-Vergleich). Zwischenzeitlich habe ich probiert die Datei nicht über FileStream sondern über MemoryStream zu laden. Das Ergebnis ist ein Speicherzugriffsfehler sobald die Datei geschrieben werden soll.
try
Updater.Head(URL); Websize := Updater.Response.ContentLength; Localsize := GetFileSize(Filename); except Localsize := 0; end; if Websize <> Localsize then begin if BackupMode = 1 then begin if ForceDirectories(BackupFolder) then begin RenameFile(Filename,BackupFolder+Filename+'_'+FormatDateTime('ddmmyy', Date)+'_'+FormatDateTime('hhnnss', Time)); end; end; FStream:= TFileStream.Create(Filename, fmCreate); Updater.Get(URL, FStream); end; Gibt es eine einfache Möglichkeit die Dateigröße "dynamisch" anzupassen? Wie z.b. bei Download Managern, wo die Dateigröße nur so groß ist wie der bereits übertragene Bereich? Vielen Dank für eure Hilfe :) |
AW: IdHTTP Stream Problem
Wenn du Angst vor Übertragungs- und Speicherfehlern hast, dann prüfe doch einfach, nach dem Download, diese Datei. Und zwar richtig.
Also nicht nur die Dateigröße, sondern den "Inhalt". > Hash, Prüfsumme und Co. Dann ist es auch egal, wie die Datei beim Speichern verwaltet wird. |
AW: IdHTTP Stream Problem
Hallo eine CRC/MD5 Checksumme habe ich bereits in betracht gezogen, allerdings müsste ich dann jedesmal wenn eine der Komponenten geupdatet werden soll eine neue Prüfsumme generieren lassen. Leider werde ich das Programm nach seiner Fertigstellung so in dieser Form nicht mehr verwalten können, daher möchte ich das ganze so einfach wie möglich halten um spätere Anwenderfehler zu vermeiden.
Danke für deine Antwort :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz