AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit Freisetzung von FileStream und Frage zum IdHTTP Datei Download
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Freisetzung von FileStream und Frage zum IdHTTP Datei Download

Ein Thema von Athris · begonnen am 4. Sep 2015 · letzter Beitrag vom 4. Sep 2015
 
nahpets
(Gast)

n/a Beiträge
 
#14

AW: Problem mit Freisetzung von FileStream und Frage zum IdHTTP Datei Download

  Alt 4. Sep 2015, 12:46
hallo,

wenn ich in einer fussgesteuert Schleife einmal eine Entscheidung treffen muss, tue ich das vorher. Ich würde vermuten, er gibt die Datei zwar frei, dies dauert aber unter Umständen zu lange, und beim nächsten Reservieren läuft das ggf. Programm in einen Fehler. Wenn er nun nur einmal das Handle (vor der Schleife) auf die Datei holt, funktioniert es.


mfg
Jo, dem is nix hinzuzufügen.
Du meinst also in etwas so:
Delphi-Quellcode:
procedure TUpdateThread.DateiDownload(strUrl, strLocalFile:String);
var
  flgexit:Boolean;
  intLength, intRangeEnd, intStartLength: Int64;
  IdDateiDownload: TIdHTTP;
  fileDatei: TFileStream;
begin
  IdDateiDownload := TIdHTTP.Create(nil);
  fileDatei:=nil;
  try
    try
      IdDateiDownload.ConnectTimeout := 10000;
      IdDateiDownload.ReadTimeout := 10000;
      IdDateiDownload.Head(strUrl);
      intStartLength := 0;
      intLength := IdDateiDownload.Response.ContentLength;

      //Ermittel die Startgröße
      if FileExists(strLocalFile) then begin
        fstrProtText := 'Die '+strLocalFile+' Datei existiert bereits und wird nun gelöscht';
        fflgProtCaption := false;
        Synchronize(AddProt);
        DeleteFile(strLocalFile);
      end;

      //Setze die Progressbar
      fintProgressStartPosition := intStartLength;
      fintProgressMaxPosition := intLength;
      Synchronize(MainDownloadProgressBegin);

      fstrProtText := 'Lade die Datei '+ExtractFileName(strLocalFile)+' herunter';
      fflgProtCaption := true;
      Synchronize(AddProt);

      flgexit := false;

      fileDatei:=nil;
      if not FileExists(strLocalFile) then begin
        fileDatei := TFileStream.Create(strLocalFile, fmCreate);
      end
      else begin
        fileDatei := TFileStream.Create(strLocalFile, fmOpenReadWrite);
      end;

      //Prüfe ob Datei verwendet wird
      repeat
        flgexit := fileDatei.Size >= intLength;
        if not flgexit then
          fileDatei.Seek(Max(0, fileDatei.Size-4096), soFromBeginning);
          intRangeEnd := fileDatei.Size+50000;

          if intRangeEnd < intLength then begin
            IdDateiDownload.Request.Range := IntToStr(fileDatei.Position) + '-'+ IntToStr(intRangeEnd);
          end
          else begin
            IdDateiDownload.Request.Range := IntToStr(fileDatei.Position) + '-';
            flgexit := true;
          end;
          IdDateiDownload.Get(strUrl, fileDatei);
        if intRangeEnd < intLength then begin
          fintProgressPosition := intRangeEnd;
          Synchronize(MainDownloadProgressWork);
        end
        else begin
          fintProgressPosition := intLength;
          Synchronize(MainDownloadProgressWork);
        end;
      until (flgexit OR Terminated);
      fileDatei.Free;
      IdDateiDownload.Disconnect;
    except
      on E : Exception do
      Begin
        MessageDlg('Bei dem Herunterladen von Dateien ist ein Fehler aufgetreten: '+E.Message, mtError, [mbOK], 0);
      end;
    end;
  finally
    IdDateiDownload.Free;
  end;
end;
Wäre eindeutig eleganter.
  Mit Zitat antworten Zitat
 


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 17:39 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