Hente indholdsfortegnelse fra en FTP server med Indy
En af mine bekendte har lavet en ftp server på sin egen pc hvor hun lægger en fil til mig en gang imellem. Jeg har så oprettet en netværksforbindelse til denne, hvor jeg så henter denne fil. vi bor i hver vores del af landet, derfor fildeling på denne måde.Hvis jeg bruger Windows til at hente denne fil, ved at åbne 'Netværkssteder' vælge hendes server, vælge den rigtige mappe og fil, så er der ingen problemer med at hente den. Dette bare for at forklare at systemet virker.
Dette er dog en omstændig måde, så for at automatisere det har jeg lavet et program, i Delphi, til at hente den.
Dette burde heller ikke være et problem, tænkte jeg.
Jeg placerede en OpenDialog på formen, og så var det jo bare at skrive følgende.
procedure TForm97.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
// Her skal der så være en kode der aflæser OpenDialog1.FileName
// og så udføre den kode der skal hente denne fil.
end;
end;
Åbn dialogboksen vises også som den skal, og det går fint med at klikke på 'netværkssteder', vælge det rigtige netværkssted, åbne den rigtige mappe, og når man klikker på den fil man vil have fat i, kommer navnet også til at stå i feltet 'Filnavn', men lige så snart man klikker på 'Åbn' så fryser programmet.
Nå, men man kan jo også hente indholdsfortegnelsen med IdFTP, og så vise listen i et nyt vindue.
procedure TForm97.Button1Click(Sender: TObject);
begin
try
IdFTP.Host := 'remoteserver';
IdFTP.User := 'brugernavn';
IdFTP.Password := 'adgangskode';
if IdFTP.Connected then IdFTP.Disconnect;
IdFTP.Connect;
IdFTP.ChangeDir('/radioprogrammer/');
AFiles := TStringList.Create;
AFiles.Clear;
IdFtp.List(AFiles, '*.mp3', False);
// Vis AFiles i et vindue hvor man kan vælge osv.
AFiles.Destroy;
Application.ProcessMessages;
IdFTP.Disconnect;
except
on E: Exception do begin
Application.MessageBox(PChar('Der er opstået en fejl i forbindelsen til serveren. Fejl: '+E.Message),'Fejl',MB_OK or MB_ICONERROR);
end;
end;
end;
Der fryser programmet også, men hvis jeg udfaser linien:
IdFtp.List(AFiles, '*.mp3', False);
så kører programmet, men så henter den jo ikke noget.
Man kan godt downloade filen hvis man indsætter filnavnet direkte i koden, og den downloade mp3 fil kan også afspilles.
procedure TForm97.Button1Click(Sender: TObject);
begin // Download test
Source := 'Filnavn.mp3';
Dest := 'C:\Filnavn.mp3';
try
IdFTP.Host := 'remoteserver';
IdFTP.User := 'brugernavn';
IdFTP.Password := 'adgangskode';
if IdFTP.Connected then IdFTP.Disconnect;
IdFTP.Connect;
IdFTP.ChangeDir('/radioprogrammer/'); //skift evt. dir
FilLen := IdFTP.Size(Source);
ProgressBar1.Max := FilLen;
Application.ProcessMessages;
StartTid := Time;
IdFTP.Get(Source, Dest, True);
IdFTP.Disconnect;
Label2.Caption := 'Færdig ' + IntToStr(SecondsBetween(Time, StartTid)) + ' sekunder.';
except
on E: Exception do begin
Application.MessageBox(PChar('Der er opstået en fejl i forbindelsen til serveren. Fejl: '+E.Message),'Fejl',MB_OK or MB_ICONERROR);
end;
end;
end;
Det eneste jeg ikke kan, er hente indholdsfortegnelsen, og det er jeg nødt til, da filer har forskellige navne, og somme tider bliver de gamle filer liggende.
HJÆLP MIG!
