![]() |
.zip-Archiv in bestimmtes Archiv herunterladen
Hey Leute,
wie schaffe ich es, dass eine Datei (zip-Archiev) von einem bestimmten Direktlink in "C:\Users\"Momentaner Benutzer"\AppData\Roaming\.minecraft\texturepacks" heruntergeladen wird und währenddessen eine ProgressBar sich auffüllt ? Und was muss ich bei "Monentaner Benutzer" einfügen ? Der Benutzer ist ja immer anders. P.S. Ist es möglich ein Bild per Link einzubinden und nicht per file ? |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zum Pfad: schau Dir einmal
![]() |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Die ist nicht lokal. Die befindet sich auf einem Server und ist direkt über einen Link
zu downloaden. |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Du teilst die Datei in z.B. 100 gleiche Stücke und lädst die Teile herunter, nach jedem geladenen Teil erhöhst du den Wert der Progressbar.
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Wovon reden wir hier eigentlich, Webserver oder wie?
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Beispiel:
![]() Wenn man diesen Link z.b. mit Firefox öffnet öffnet sich sofort das fenster zum downloaden P.S. Das mit der ProgressBar ist erstmal kein "MUSS" |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Dann such doch mal z.B. nach
![]() |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
@DeddyH:
Joar, er möchte via HTTP in dieses Benutzerverzeichnis downloaden. Wie man den Benutzerpfad bestimmt, wurde aber schon gesagt. Ansonsten brauchst du eine HTTP-Komponente oder eine Prozedur, welche dir die Datei via HTTP runterlät und dir dazu noch ein Progress-Event anbietet. Die Indy-Komponenten machen sowas. URLDownloadToFile macht das nicht, aber wenn man danach ( ![]() |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Könntet ihr mit vllt ein Beispiel für URLDownloadToFile geben ? :?
€: Ignoriert es habe eins gefunden :D Bei mir wäre es dann Zitat:
Ich habe da schonmal was gesehn wie "Lokal_User" oder irgendsowas :? |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Du hast schon bemerkt, dass wir auf die Suche verlinkt haben? Da gibt es reichlich Beispiele, IIRC sogar eins mit Fortschrittsanzeige.
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Auf meinen Edit achten ^^
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Auf DeddyH's Posting #2 achten ...
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Könntet ihr mir vllt ein beispiel geben wie ich SHGetFolderPath mit dem was ich bis jetzt habe verknüpfen muss ?
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
[edit] Grad eben war noch keine zweite Seite zu sehn, ich schwör. :oops: Beispiel? => Forensuche ... das wurde schon oft gefragt |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Versuch mal, ob das passt:
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; |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
[klugscheiss_mode_on]
Auch, wenn es nichts mit dem Thema zu tun hat, aber das Ding nennt sich Archiv und nicht Archiev :stupid: [/klugscheiss_mode_on] |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Oh ups :D
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Delphi-Quellcode:
Da siehst Du, was ermittelt wird und kannst den Rest dranhängen.
ShowMessage(UserAppData);
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
Delphi-Quellcode:
Habe die größe .zip Datei mal durch ein einfaches Bild ersetzt. Jedoch lädt er es nicht in das Gewünschte Verzeichnis. 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 :D
urldownloadtofile(nil,'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg','UserAppData\.minecraft\texturepacks',0,nil);
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Du musst das schon richtig platzieren! Zeig mal den Code, den du gerade hast -- halt einen sinnvollen Ausschnitt davon!
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
![]() Unit IOUtils: ![]() ![]() |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Prima, zumal die Delphi-Version nicht angegeben ist. Das ganze Dorf ist stolz auf Dich.
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
Vielleicht hat er ja eine passende Version? :angle2: Und ich kann es nicht angeben, da ich es nicht weiß (leider wird sowas ja nicht in der OH erwähnt). Ist aber vermutlich irgendwann ab D2006 bis XE dazugekommen. War aber auch für dich und Andere bestimmt. (im XE ist es schon drin) |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Bin ein totaler Anfänger wie gesagt :( Ich habe Delphi7 weil wir das auch so in der Schule benutzen
Sieht jetzt bei mir so aus:
Delphi-Quellcode:
Habe die größe .zip Datei mal durch ein einfaches Bild ersetzt, der Rest (AppData finden) passt. Jedoch lädt er es nicht in das Gewünschte Verzeichnis. 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
urldownloadtofile(nil,'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg','UserAppData\.minecraft\texturepacks',0,nil);
|
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Das ist doch kein Pfad, den du da angegeben hast... Nutze doch mal die Methode, die dir vorgeschlagen wurde!
Delphi-Quellcode:
So, und ob DestinationPath nun ein Pfad oder eine Datei sein sollte kann ich dir leider nicht sagen. Lies dich doch aber einfach mal ein wenig ein. Hier im Forum wirst du sehr viel finden, wenn du dich nur ein wenig bemühst! Dir fehlt es ja scheinbar schon an den Grundlagen.
function GetUserAppDataPath(): string;
begin Result := SpecialFolder(CSIDL_APPDATA); end; var ImageUrl : string; DestinationPath : string; begin ImageUrl := 'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg'; DestinationPath := GetUserAppDataPath() + '\.minecraft\texturepacks'; URLDownloadToFile(nil, ImageUrl, DestinationPath, 0, nil); end; |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Dein String ist falsch aufgebaut.
Delphi-Quellcode:
[edit] Halt Moment, muss da nicht ein Dateiname angegeben werden statt nur das Zielverzeichnis? [/edit]
urldownloadtofile(nil, 'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg', PChar(IncludeTrailingPathDelimiter(UserAppData) + '.minecraft\texturepacks'), 0, nil);
[edit2] Japp, mach besser einen Dateinamen draus. [/edit2] |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
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 |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zudem sollte sichergestellt werden, dass der Pfad, in den du schreiben willst, überhaupt existiert!
DirectoryExists und ForceDirectories wären hier zwei nützliche Methoden. |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
Delphi-Quellcode:
urldownloadtofile(nil,'http://img3.imagebanana.com/img/k789yl2d/AssassinsCreed_Dx102008061616351998.jpg',GetUserAppData + '\.minecraft\texturepacks',0,nil);
Zitat:
Delphi-Quellcode:
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...
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; |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
|
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; |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
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:
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. |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
![]() ![]() |
AW: .zip-Archiev in bestimmtes Archiev herunterladen
Zitat:
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 |
AW: .zip-Archiv in bestimmtes Archiv herunterladen
Wie gesagt, du brauchst einen Callback, welcher dich während des Downloads über den Fortschritt informiert.
![]() Ansonsten ![]() ![]() 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. |
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:
![]() |
AW: .zip-Archiv in bestimmtes Archiv herunterladen
Ansonsten hilft auch ein Blick in die
![]() |
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 16:38 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