Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi .zip-Archiv in bestimmtes Archiv herunterladen (https://www.delphipraxis.net/167631-zip-archiv-bestimmtes-archiv-herunterladen.html)

Andreas L. 10. Apr 2012 15:56

AW: .zip-Archiev in bestimmtes Archiev herunterladen
 
Zitat:

Zitat von Premaider (Beitrag 1161017)
Sieht jetzt bei mir so aus:
Delphi-Quellcode:
urldownloadtofile(nil,'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg','UserAppData\.minecraft\texturepacks',0,nil);

Du hast den Funktionsnamen UserAppData in den String geschrieben statt ihn damit zu verbinden. So ist es richtig:
Delphi-Quellcode:
urldownloadtofile(nil,'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg',GetUserAppData + '\.minecraft\texturepacks',0,nil);
Zitat:

Zitat von Premaider (Beitrag 1161017)
Ist es möglich dabei einige downloadinfos anzeigen zu lassen ? Weil bei der 30MB .zip-Datei kann das ja schon etwas dauern, also downloadgeschwindigkeit und restdauer oder so

Ob und wie das mit URLDownloadToFile geht weiß ich nicht. Mit den Indy-Komponente ist es aber ganz einfach: Einfach TIdHTTP auf das Form ziehen und folgenden Code ausführen:
Delphi-Quellcode:
const
  DownloadFile = 'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg';
var
  DownloadPath: String;
  fs: TFileStream;
begin
  DownloadPath := GetUserAppData;

  fs := TFileStream.Create(DownloadPath + 'Dateiname.jpg', fmCreate);
  try
    IdHTTP1.Get(DOWNLOAD_FILE, fs);
  finally
    FreeAndNil(fs);
  end;
end;
Im Objekt-Inspektor kannst du der IdHTTP-Komponente verschiedene Ereignisse zuweisen, so z. B. auch um die restliche Downloadzeit zu ermitteln oder eine ProgressBar zu aktualisieren...

Premaider 10. Apr 2012 15:56

AW: .zip-Archiev in bestimmtes Archiev herunterladen
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1161022)
Zudem sollte sichergestellt werden, dass der Pfad, in den du schreiben willst, überhaupt existiert!
DirectoryExists und ForceDirectories wären hier zwei nützliche Methoden.

Es existiert in jedem Fall :D

DeddyH 10. Apr 2012 15:56

AW: .zip-Archiev in bestimmtes Archiev herunterladen
 
Und nochmal im Ganzen, damit das hoffentlich mal weitergeht:
Delphi-Quellcode:
uses SHFolder;

function SpecialFolder(CSIDL: integer): string;
const
  SHGFP_TYPE_CURRENT = 1;
begin
  SetLength(Result, MAX_PATH);
  SHGetFolderPath(0, CSIDL, 0, SHGFP_TYPE_CURRENT, PChar(Result));
  SetLength(Result, StrLen(PChar(Result)));
end;

function UserAppData: string;
begin
  Result := SpecialFolder(CSIDL_APPDATA);
end;

...

var
  Pfad: string;
  Datei: string;
begin
  Pfad := IncludeTrailingPathDelimiter(UserAppData) + '.minecraft\texturepacks';
  if not DirectoryExists(Pfad) then
    if not ForceDirectories(Pfad) then
      raise Exception.CreateFmt('Verzeichnis %s kann nicht angelegt werden.', [Pfad]);
  Datei := IncludeTrailingPathDelimiter(Pfad) + 'Test.jpg';
  urldownloadtofile(nil, 'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg', PChar(Datei), 0, nil);
end;

himitsu 10. Apr 2012 15:58

AW: .zip-Archiev in bestimmtes Archiev herunterladen
 
Zitat:

Code:
[Fehler] Unit1.pas(29): Undefinierter Bezeichner: 'SpecialFolder'

Diese Meldung besagt "Kenn ich nicht".
Wenn du die genannte Funktion verwenden möchtest, dann mußt du diese natürlich in dein Programm einbauen, da sie im Delphi nicht automatisch vorhanden ist.
Alternativ, falls es diese irgendwo gibt, muß man die entsprechende Unit einbinden.
Zitat:

Code:
[Fehler] Unit1.pas(39): Inkompatible Typen: 'String' und 'PAnsiChar'

Die Funktion will einen PChar als Parameter, da kannst du nicht einfach einen String übergeben, da diese Beiden sich nicht vertragen,
sondern mußt eventuell vorher den Typ casten (umwandeln) und anpassen. (das sieht man aber auch an den hier gezeigten Beispielen)

@DeddyH: DirectoryExists ist im ForceDirectories schon eingebaut.
Das muß man daher nicht unbedingt selber nochmal prüfen.

s.h.a.r.k 10. Apr 2012 15:59

AW: .zip-Archiev in bestimmtes Archiev herunterladen
 
Zitat:

Zitat von Premaider (Beitrag 1161021)
Folgende Fehler wenn ich deine Methode benutze :(
Muss ich noch eine Unit einbinden oder für SpecialFolder eine Variable setzen ?
Delphi-Quellcode:
[Fehler] Unit1.pas(29): Undefinierter Bezeichner: 'SpecialFolder'
[Fehler] Unit1.pas(39): Inkompatible Typen: 'String' und 'PAnsiChar'
[Fehler] Unit1.pas(39): Inkompatible Typen: 'String' und 'PAnsiChar'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

Schau dir nochmals ganz scharf den Beitrag und den hier an.

Premaider 10. Apr 2012 16:01

AW: .zip-Archiev in bestimmtes Archiev herunterladen
 
Zitat:

Zitat von DeddyH (Beitrag 1161025)
Und nochmal im Ganzen, damit das hoffentlich mal weitergeht:
Delphi-Quellcode:
uses SHFolder;

function SpecialFolder(CSIDL: integer): string;
const
  SHGFP_TYPE_CURRENT = 1;
begin
  SetLength(Result, MAX_PATH);
  SHGetFolderPath(0, CSIDL, 0, SHGFP_TYPE_CURRENT, PChar(Result));
  SetLength(Result, StrLen(PChar(Result)));
end;

function UserAppData: string;
begin
  Result := SpecialFolder(CSIDL_APPDATA);
end;

...

var
  Pfad: string;
  Datei: string;
begin
  Pfad := IncludeTrailingPathDelimiter(UserAppData) + '.minecraft\texturepacks';
  if not DirectoryExists(Pfad) then
    if not ForceDirectories(Pfad) then
      raise Exception.CreateFmt('Verzeichnis %s kann nicht angelegt werden.', [Pfad]);
  Datei := IncludeTrailingPathDelimiter(Pfad) + 'Test.jpg';
  urldownloadtofile(nil, 'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg', PChar(Datei), 0, nil);
end;

Danke funktioniert jetzt endlich ! :D
Da die richtige Datei aber ca. 30 MB groß ist wäre eine ProgressBar oder eine "Restzeit"-Anzeige doch ganz praktisch. Denkt ihr das könnt ihr jemandem mit meinem Wissen erklären ? :D

himitsu 10. Apr 2012 16:18

AW: .zip-Archiv in bestimmtes Archiv herunterladen
 
Wie gesagt, du brauchst einen Callback, welcher dich während des Downloads über den Fortschritt informiert.

MSDN-Library durchsuchenURLDownloadToFile ... der letzte Parameter (k.A. aber irgendwo in der DP oder über Google findet man eventuell ein Beispiel)

Ansonsten Delphi-Referenz durchsuchenURLDownloadToFile ===> z.B. http://www.delphipraxis.net/100570-u...-anzeigen.html

Oder INDY.
TIdHTTP sollte es im D7 schon geben und hier findet man mit großer Sicherheit irgendwo ein Beispiel dafür.
Und im Netz schwirren viele Tutorials rum. Du mußt nur aufassen daß es "alt" ist, da die Schnittstellen verändert wurden.

Popov 10. Apr 2012 16:31

AW: .zip-Archiv in bestimmtes Archiv herunterladen
 
Ich weiß nicht ob die Frage inzwischen geklärt ist, ich benutze gelegentlich eine 10 Jahre alte Komponente: http://www.utilmind.com/delphi und dort nach HTTP GET suchen. Da steht bis Delphi 6, aber bei 7 funktioniert die auch. Auf jeden Fall ist sie einfach zu handhaben, und liefert auch den Wert für ProgressBar und einiges mehr. Dabei ist ein Beispielprojekt.

DeddyH 10. Apr 2012 16:32

AW: .zip-Archiv in bestimmtes Archiv herunterladen
 
Ansonsten hilft auch ein Blick in die CodeLib.

Premaider 10. Apr 2012 16:36

AW: .zip-Archiv in bestimmtes Archiv herunterladen
 
€: Hat sich dank DeddyH erledigt!! VIEEELEEEN DANK :D Und natürlich auch den Anderen ein dickes Danke ;D

Jetzt steht nurnoch die Frage wie ich ein .jpg über einen Link einbinde. Und wie ich es überhaupt auf der GUI platziere


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.
Seite 4 von 5   « Erste     234 5      

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