Autor Beitrag
kulka1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Di 02.06.09 13:29 
Hallo!

ich möchte, das wenn ich auf ein Button klicke, eine Datei von meinem Server heruntergeladen wird, und diese Datei soll dann in einem Ordner eine gleichnamige Datei ersetzen!

Wenn möglich sollte der Fortschritt mit einer Progressbar angezeigt werden ;)

Könnt ihr mir weiterhelfen? =)

mfg kulka1

p.s. codes sind auch erwünscht :P


Moderiert von user profile iconNarses: Topic aus Datenbanken verschoben am Di 02.06.2009 um 14:10
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 02.06.09 14:15 
Schon die Forensuche bemüht oder in der entsprechenden Sparte mal geguckt?
whirl
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 02.06.09 15:16 
Wohin soll die Datei denn heruntergeladen werden? Wenn sie auf deinem Rechner landen soll, dann ist das doch eine lokale Angelegenheit, die mit der eigentlichen Programmierung gar nichts zu tun hat. Oder verstehe ich dich falsch?

Beschreib dein Problem doch bitte noch einmal etwas konkreter, es ist schwer sich etwas darunter vorzustellen.

Gruß, Whirl
Tropby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 71
Erhaltene Danke: 4

Vista, Win XP, Win 89
Turbo Delphi Ex.
BeitragVerfasst: Di 02.06.09 17:14 
Diese Funktion kann dir die Datei herunterladen und sollte auch eine bestehende Datei überschreiben.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
function DownloadFile(
    url: string;
    const destinationFileName: string): boolean;
var
  hInet: HINTERNET;
  hFile: HINTERNET;
  localFile: File;
  buffer: array[1..1024of byte;
  bytesRead: DWORD;
begin
  result := False;

//  hInet := InternetOpen(PChar(application.title),
//    INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);

  url := Strtourl(url);
  hInet := InternetOpen(PChar(application.title),
    INTERNET_OPEN_TYPE_DIRECT,nil,nil,0);
    
  hFile := InternetOpenURL(hInet, PChar(url), nil0, INTERNET_FLAG_PRAGMA_NOCACHE, 0);
  if Assigned(hFile) then
  begin
    AssignFile(localFile,destinationFileName);
    Rewrite(localFile,1);
    repeat
      InternetReadFile(hFile,@buffer,SizeOf(buffer),bytesRead);
      BlockWrite(localFile,buffer,bytesRead);
    until bytesRead = 0;
    CloseFile(localFile);
    result := true;
    InternetCloseHandle(hFile);
  end;
  InternetCloseHandle(hInet);
end;
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Di 02.06.09 23:35 
hey... ähm, was für variablen muss ich da denn benutzen??
und wo genau muss bei dem beispiel die url vom download hin und der Pfad zum hinspeichern und ersetzen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 02.06.09 23:41 
user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
hey... ähm, was für variablen muss ich da denn benutzen??
und wo genau muss bei dem beispiel die url vom download hin und der Pfad zum hinspeichern und ersetzen?
Also die Parameter für die Funktion sind doch eigentlich eindeutig benannt... :lol:
user profile iconTropby hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
function DownloadFile(
    urlstring;
    const destinationFileNamestring): boolean;
Mehr als die beiden Angaben musst du an die Funktion nicht übergeben...
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 02.06.09 23:42 
user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
und wo genau muss bei dem beispiel die url vom download hin und der Pfad zum hinspeichern und ersetzen?

Werden als Parameter beim Aufruf mit gegeben.

Und welche Unit du dafür unter uses hinzufügen musst, steht evtl. in der Hilfe. Markier einfach mal einen der unbekannten Begriffe und drück F1, da sollte irgendwo stehen, welche Unit dafür benötigt ist.

_________________
PROGRAMMER: A device for converting coffee into software.
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Di 02.06.09 23:44 
uups :D, da ist mir was durche hosenträger gegangen :D:D
ich habe nicht den ganzen teil gelesen, wusste nicht das da noch mehr ist :D, hab nur am dem begin teil alles gesehen^^... ma eben ausprobiern :D
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 02.06.09 23:50 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Und welche Unit du dafür unter uses hinzufügen musst, steht evtl. in der Hilfe.
Nicht nötig, einfach rechte Maustaste drauf, "Refactoring" --> "Find Unit...", bestätigen, fertig. In diesem Fall wird die Unit dabei auch gefunden. ;-)

Bei Delphi 7 oder früher muss man nachschauen, allerdings wohl nicht in der Hilfe sondern der MSDN Dokumentation.
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Di 02.06.09 23:57 
ausblenden Delphi-Quelltext
1:
2:
3:
function DownloadFile(
   http://foliga.de/fifa.db : string;
    const 'Software\EA Sports\FIFA 09\data\cmn'string): boolean;

habe das jetzt so, aber da ich habe da mit sicherheit was falsch eingetragen ;) :D:D, weil er erkennt jetzt "const" nicht mehr^^, iwas

also er soll das in den ordner Software\EA Sports\FIFA 09\data\cmn speichern, dort ist auch schon eine fifa.db.
und von der seite foliga.de/fifa.db läd er eine andere .db runter und ersetzt die ältere im genannten ordner!
Tropby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 71
Erhaltene Danke: 4

Vista, Win XP, Win 89
Turbo Delphi Ex.
BeitragVerfasst: Mi 03.06.09 00:00 
Du musst das ungefähr so aufrufen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function DownloadFile(url: stringconst destinationFileName: string): boolean;
begin
{...}
end;

procedure TForm1.Button1Click(Sender : TObject);
begin
  DownloadFile('http://foliga.de/fifa.db''c:\Software\EA Sports\FIFA 09\data\cmn');
end;

_________________
Tropby
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 03.06.09 00:02 
Du veränderst da gerade den Funktionskopf -> Nix gut.
Die Parameter musst du beim AUFRUF angeben, also z.B. in nem ButtonClick oder sowas. Siehe www.christian-stelzm...oaded/#_Toc180058867

_________________
PROGRAMMER: A device for converting coffee into software.
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Mi 03.06.09 00:10 
was ist denn nu richtig^^, also wenn ich dieshier einfüge:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function DownloadFile(url: stringconst destinationFileName: string): boolean;
begin
{...}
end;

procedure TForm1.Button1Click(Sender : TObject);
begin
  DownloadFile('http://foliga.de/fifa.db''c:\Software\EA Sports\FIFA 09\data\cmn');
end;


dann zeigt er mir

Undefinierte Bezeichner an: HINTERNET, Strtourl, Internetopen, INTERNET OPEN TYPE DIRECT, InternetOpenURL, INTERNET_FLAG_PRAGMA_NOCACHE, InternetReadFile, InternetCloseHandle


der button ist bei einem vorhanden erstellten webbrowser, nur zur info
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 03.06.09 00:14 
user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:

Undefinierte Bezeichner an: HINTERNET, Strtourl, Internetopen, INTERNET OPEN TYPE DIRECT, InternetOpenURL, INTERNET_FLAG_PRAGMA_NOCACHE, InternetReadFile, InternetCloseHandle

Jo.
Und dazu, siehe oben:
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Und welche Unit du dafür unter uses hinzufügen musst, steht evtl. in der Hilfe. Markier einfach mal einen der unbekannten Begriffe und drück F1, da sollte irgendwo stehen, welche Unit dafür benötigt ist.

und
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Nicht nötig, einfach rechte Maustaste drauf, "Refactoring" --> "Find Unit...", bestätigen, fertig. In diesem Fall wird die Unit dabei auch gefunden. ;-)

Bei Delphi 7 oder früher muss man nachschauen, allerdings wohl nicht in der Hilfe sondern der MSDN Dokumentation.

_________________
PROGRAMMER: A device for converting coffee into software.
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Mi 03.06.09 00:27 
das mit f1 hat nicht geklappt, da steht das der dienst bei windows vista nicht unterstützt wird (Die Hilfe für dieses Programm wurde in einem Windows-Hilfeformat erstellt, das in früheren Versionen von Windows verwendet wurde. Es wird in Windows Vista nicht unterstützt.)

und das von jaenicke fügt oder zeigt mir auch nicht die gesuchte uses klausel, oder vllt liegt das mit dieser komisches hilfe dingsbums zusammen :D... bzw ich habe es auf englisch nicht genau gefunden, weils auf deutsch ist, unter Fehlersuche war das jedenfalls nicht dabei ;) und auch sonst nichts das das zum laufne bringt -.-
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 03.06.09 00:42 
user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
das mit f1 hat nicht geklappt, da steht das der dienst bei windows vista nicht unterstützt wird
Wie du das hinbekommst habe ich hier geschrieben...
www.delphi-library.d...ewtopic.php?p=544403

user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
und das von jaenicke fügt oder zeigt mir auch nicht die gesuchte uses klausel
Das liegt daran, dass du eine alte Version von Delphi hast (wie man an dem Fehler mit der Hilfe sieht), da funktioniert das mit dem Refactoring in der Tat noch nicht, da muss man die Unit manuell suchen, wie die ganzen anderen Sachen auch. Das kann halt noch nicht so viel selbst.

In deinem Fall ist das die Unit WinINet, wie du in der MSDN Dokumentation wie gesagt siehst...
MSDN Dokumentation hat folgendes geschrieben:
Header: Wininet.h
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Mi 03.06.09 01:44 
ich denke ich habe den ganzen sinn jetzt verstanden :P
die hilfe geht jetzt bei mir =)... allerdings weiß ich noch nciht wie du "wininet" herausgefunden hast ;)

jetzt möchte er von mir nur noch wissen:

ausblenden Delphi-Quelltext
1:
  url := StrToUrl(url);					

aber welche uses klausel dafür verwendet werden muss hab ich konnte ich nicht so leicht herausfinden wie du ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 03.06.09 02:36 
user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
allerdings weiß ich noch nciht wie du "wininet" herausgefunden hast ;)
Ich wusste es ohnehin welche Unit das ist. ;-)
Wie du an dem Link zur Dokumentation siehst, steht es aber dort auch da. Meistens heißt die Unit in Delphi genauso wie die dort angegebene Headerdatei des SDKs. Wenn es die Unit mal nicht gibt, dann helfen die JEDI API Header Übersetzungen meistens weiter oder man muss die Funktion selbst deklarieren.

user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
  url := StrToUrl(url);					

aber welche uses klausel dafür verwendet werden muss hab ich konnte ich nicht so leicht herausfinden wie du ;)
Kommentiere die Zeile einfach aus, ich weiß nicht was das machen soll. Das ist eine selbst definierte Funktion würde ich sagen. Vielleicht sollte die das "http://" anfügen oder sowas. Wenn du die Adresse aber direkt richtig angibst, sollte das ohne die Zeile gehen. ;-)
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Mi 03.06.09 09:45 
okay danke =)

das programm läuft jetzt, aber noch nicht fehlerfrei

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
function DownloadFile(url: stringconst destinationFileName: string): boolean;
var
  hInet: HINTERNET;
  hFile: HINTERNET;
  localFile: File;
  buffer: array[1..1024of byte;
  bytesRead: DWORD;
begin
  result := False;

//  hInet := InternetOpen(PChar(application.title),
//    INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);

  hInet := InternetOpen(PChar(application.title),
    INTERNET_OPEN_TYPE_DIRECT,nil,nil,0);

  hFile := InternetOpenURL(hInet, PChar(url), nil0, INTERNET_FLAG_PRAGMA_NOCACHE, 0);
  if Assigned(hFile) then
  begin
    AssignFile(localFile,destinationFileName);
    Rewrite(localFile,1);
    repeat
      InternetReadFile(hFile,@buffer,SizeOf(buffer),bytesRead);
      BlockWrite(localFile,buffer,bytesRead);
    until bytesRead = 0;
    CloseFile(localFile);
    result := true;
    InternetCloseHandle(hFile);
  end;
  InternetCloseHandle(hInet);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  DownloadFile('http://foliga.de/fifa.db''c:\Software\EA Sports\FIFA 09\data\cmn');
end;


zeile 21 wird dann markiert und es kommt diese fehlermeldung:

Zitat:
Im WebBrow.exe ist eine Exeption der Klasse EInOutError aufgetreten. Meldung 'Ungültiger Dateiname'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen.


was bedeutet das?
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 03.06.09 10:24 
Steht doch da: Der Dateiname ist ungültig.
Hast dich vielleicht im Ordnernamen vertippt? Sicher, dass es c:\Software ist, und nicht c:\Programme ?
Außerdem hast du keine Dateiendung angegeben..

_________________
PROGRAMMER: A device for converting coffee into software.