Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Textdatei runterladen - lokal speichern - ohne User-Eingriff (https://www.delphipraxis.net/139146-textdatei-runterladen-lokal-speichern-ohne-user-eingriff.html)

Tazidus 24. Aug 2009 17:21


Textdatei runterladen - lokal speichern - ohne User-Eingriff
 
Hallo,
ich habe ein Programm, welches Daten aus einer Text-Datei benutzt und dann Berechnungen durchführt.

Die Textdatei wird viermal im Jahr zu bestimmten Zeiten (letzter Werktag im Monat) geändert und dann bereitgestellt wird.

Hierzu benutze ich einen Link.
Wenn man jetzt aber im Browser auf diesen Link klickt, erscheint die übliche Meldung: speichern oder öffnen.

Meine Vorstellung ist jetzt, dass mein Programm am Datum erkennen soll, dass wieder ein Update fällig ist. Dies habe ich schon fertig.
Mein Problem ist es, die Datei runter zu laden, ohne dass der Benutzer was dabei tun muss.

Daher erbitte ich Hilfe bei folgenden Schritten:

- Verbindung zu einem HTTP-Link aufbauen
- Datei empfangen
- lokal speichern

und das alles ohne das Benutzer was machen muss.

Würde mich über ein bisschen Hilfe sehr freuen.

Gruß
Daniel

jfheins 24. Aug 2009 17:23

Re: Textdatei runterladen - lokal speichern - ohne User-Eing
 
Das sollte sehr einfach mit den Indys gehen ;)

Evtl. vorher mit IdHTTP.Head() nachgucken, ob die Datei runtergelden werden muss, und mit IdHTTP.Get() kannst edie Datei runterladen.

shmia 24. Aug 2009 18:35

Re: Textdatei runterladen - lokal speichern - ohne User-Eing
 
Delphi-Quellcode:
uses ...,URLMon;

function DownLoadInternetFile(const Source, Dest : String): Boolean;
begin
   Result := URLDownloadToFile(nil,PChar(Source),PChar(Dest),0,nil) = 0
end;
....

if not DownloadInternetFile('http://www.deinserver.de/pfad/datei.txt', 'C:\datei.txt') then
   raise Exception.Create('Datei bla bla konnte nicht heruntergeladen werden');

lowF 25. Aug 2009 16:49

Re: Textdatei runterladen - lokal speichern - ohne User-Eing
 
Delphi-Quellcode:

var lFileStream : TFileStream;
begin
  lFileStream := TFileStream.create('C:\',fmCreate);
  IdHTTP1.Get('http://www.url.de/file.txt',lFileStream);
  lFileStream.destroy;
end;
Funktioniert natürlich auch mit Memory- oder Stringstreams, Stringstream sinnvoll, wenn du die Textdatei sofort auslesen willst, um damit weiterzuarbeiten.

Brauchst natürlich Indy9/Indy10, welches eh sinnvoll ist, bei Delphi zu installieren.

mfg
lowF

PS: Am besten noch mit try - except abfragen umgeben, um sicher zu gehen.

DeddyH 25. Aug 2009 16:52

Re: Textdatei runterladen - lokal speichern - ohne User-Eing
 
Das würde ich aber ein wenig erweitern.
Delphi-Quellcode:
var lFileStream : TFileStream;
begin
  lFileStream := TFileStream.create('C:\',fmCreate or fmOpenWrite or fmShareDenyWrite);
  try
    IdHTTP1.Get('http://www.url.de/file.txt',lFileStream);
  finally
    lFileStream.Free;
  end;
end;

lowF 25. Aug 2009 16:58

Re: Textdatei runterladen - lokal speichern - ohne User-Eing
 
Danke dafür, wusste den Trick mit "or" gar nicht. Gut zu wissen.

DeddyH 25. Aug 2009 17:07

Re: Textdatei runterladen - lokal speichern - ohne User-Eing
 
Zitat:

Zitat von lowF
Danke dafür, wusste den Trick mit "or" gar nicht. Gut zu wissen.

http://www.delphipraxis.net/internal...t.php?t=113482 ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 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