LNet Tutorial

Alle Fragen zur Netzwerkkommunikation
lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

Btw. ich benutze Synapse.

Das "XXX" soll einfach nur nen beliebigen Pfad darstellen...
Der erste Code-Schnipsel funktioniert ja einwandfrei.
Ich mach nen Login, wechsel das Verzeichnis, kopiere alle Dateinamen vom Verzeichnis in FtpList und gebe diese danach in einer ListBox aus. Funktioniert bis dahin.

Jetzt will ich aber, wenn das fertig ist, in ein anderes Verzeichnis wechseln und das selbige tun (andere ListBox zur Ausgabe). Blos schon der Verzeichniswechsel funktioniert nicht. Außerdem wird die Dateiliste (FtpList) des alten Verzeichnisses in die neue ListBox ausgegeben.

Pseudo-Code:
ChangeWorkingDir(A)
FTPClient.List(A) --> ListBox1.Items[i]:=FTPClient.FtpList.Items[i]
-----bis hier hin funktionierts
ChangeWorkingDir(B)
FTPClient.List(B) --> ListBox2.Items[i]:=FTPClient.FtpList.Items[i]
-----in ListBox2 wird das gleiche ausgegeben wie in ListBox1


Warum? Muss man sich vll erst auslogen und dann wieder neu einloggen. Dann würde es ja auch funktionieren, nur muss es ja auch so funktionieren, wie oben beschrieben.
Wie gesagt, schon der zweite ChangeWorkingDir schlägt fehl (Memo-Ausgabe)

grüße

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6211
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

lucster hat geschrieben:-----bis hier hin funktionierts
ChangeWorkingDir(B)

Ein ChangeWorkingDir mit ".." geht ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

Der zweite ChangeWorkingDir funktioniert nicht.
Ich poste jetzt nochmal meine Code:

Code: Alles auswählen

//Objekt von TFTPSend erzeugen
        FTPClient := TFTPSend.Create;
 
//Host, Port, Nutzername und Passwort setzen
        FTPClient.TargetHost:=IP;
        FTPClient.TargetPort:=FTPPort;
        FTPClient.UserName:=UserName;
        FTPClient.Password:=Password;
 
//Verbinden
        if not FTPClient.Login then
          begin
            FTPClient.Free;
            MessageDlg('Fehler', ('Konnte keine Verbindung zu '+IP+' aufbauen.'), mtError, [mbOk], 0);
            Exit;
          end
        else Memo1.Lines.Add('Verbindung zu '+IP+' hergestellt...');
 
//Verzeichniswechsel
        FTPClient.ChangeWorkingDir('D:\pcupdate\HC700\LOG');
 
//Funtkion, die die Namen der Dateien des aktuellen Verzeichnisses in FtpList speichert, diese werden in ListBox1 ausgegeben
        if FTPClient.List(FTPClient.GetCurrentDir, false) then
          for i:=0 to FTPClient.FtpList.Count-1 do
            ListBox1.Items.Add(FTPClient.FtpList.Items[i].FileName);
 
        Memo1.Lines.Add('Log-Verzeichnis geladen...');
 
        if not(Values[High(Values)]='-.-') then
          begin
            if Values[1]='-.-' then //wenn Datum selektiert ist
              begin
                //Verzeichniswechsel
                FTPClient.ChangeWorkingDir('D:\ahsc\save\hsrawdata\'+Values[0]);
                Memo1.Lines.Add(FTPClient.GetCurrentDir);
                {hier wird immernoch das alte Verzeichnis ausgegeben}
 
                if FTPClient.List(FTPClient.GetCurrentDir, false) then
                  for i:=0 to FTPClient.FtpList.Count-1 do
                    ListBox5.Items.Add
                            (FTPClient.GetCurrentDir+'
/'
                            +FTPClient.FtpList.Items[i].FileName);
              end
......


Ich glaube mit realtiven Pfad klappt das nicht.
will ja in diese beiden Pfad:
1. 'D:\pcupdate\HC700\LOG'
2. 'D:\ahsc\save\hsrawdata\'+Values[0]' bzw. Values[i] (der Pfad verändert sich in einer Schleife im Else-Zweig)

grüße

----
Hab mal die wichtigsten Befehlsbeschreibungen kopiert:
***
function List(Directory: string; NameList: Boolean): Boolean; virtual;
Download directory listing of Directory on FTP server. If Directory is empty string, download listing of current working directory. If NameList is True, download only names of files in directory. (internally use NLST command instead LIST command) If NameList is False, returned list is also parsed to FtpList property.
***
function ChangeWorkingDir(const Directory: string): Boolean; virtual;
Change currect working directory to Directory on FTP server.
***
function ChangeToRootDir: Boolean; virtual;
walk to upper directory on FTP server.
----
Ist daraus was zu schließen?

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

Na TOP! Ich habs.
Alle ChangeWorkingDir nach dem 1., müssen in Linux-Pfadangabe-Schreibweise getätigt werden....
So klappts jetzt:
FTPClient.ChangeWorkingDir('/D:/ahsc/save/hsrawdata/'+Values[0]);

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

lucster hat geschrieben:Btw. ich benutze Synapse.

Das "XXX" soll einfach nur nen beliebigen Pfad darstellen...




Seit wann gibt es Laufwerksbuchstaben bei FTP?

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Beitrag von Hitman »

Das kann ja jeder FTP Server machen "wie er will". Darum sind ja auch die slashes nötig, weil "D:" eben auch nur ein (virtueller) Verzeichnisname ist.

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

Hitman hat geschrieben:Das kann ja jeder FTP Server machen "wie er will". Darum sind ja auch die slashes nötig, weil "D:" eben auch nur ein (virtueller) Verzeichnisname ist.

(virtueller) Verzeichnisname:

D:\xxx nicht.
/D:/xxx sicherlich.

Das war das was mich gewundert hat.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Beitrag von Hitman »

Ja, aber das wurde schon (schmerzlich? ;)) festgestellt, dass erstere Variante nicht ging ;)

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

So isses -.-

Antworten