Filedate von FTP server



  • Hi,

    wie komme ich an das filedate von einer auf einem ftp-server liegenden datei?
    ich connecte, liste und hab alle files in nem stringgrid stehen. da hörts dann aber auch schon auf 😞

    danke schonma Balkooo



  • Hallo,

    ich hab das selbe Problem. Ich hole mir mit der Indy-Componente über 'List' die Datei-Liste. Die daraus entstandenen Strings könnte man ja noch voneinander trennen, wenn da nicht das Problem der unterschiedlichen FTP-Server wäre.
    Beispiel 1:

    UNIX emulated by FileZilla
    -rw-r--r-- 1 ftp ftp 36261 Jun 05 2003 aender.txt
    -rw-r--r-- 1 ftp ftp 401 Mar 12 2003 barcode.txt

    Beispiel 2:

    Windows_NT version 5.0
    06-05-03 11:33AM 36261 aender.txt
    03-12-03 09:32AM 401 barcode.txt

    Es gibt doch bestimmt eine Möglichkeit, für eine entsprechende Datei auf dem FTP-Server das Dateidatum zu ermitteln. Mit der List-Methode gehts nicht so sonderlich gut. Meine Versuche, das über FileStreams zu lösen gingen bis jetzt alle schief. 😞

    Wer weiss wies geht ???

    Bis denne
    Jente



  • habs jetzt mit der TNMFTP->List() gemacht:

    FTP1->FTPDirectoryList->ModifDate->Strings[i] gibt dir n String im Format "m dd hh:nn" zurück, den habbich dann bearbeitet.
    Naja, Selbsthilfe, der beste Weg zur Besserung 😞



  • Tach auch,

    hast Du mal nachgeschaut, mit welcher Software der FTP läuft ? Die DirectoryList funktioniert nämlich nicht bei allen FTP-Servern. Ich hab hier noch einen FileZilla-Server laufen, da sagt FTPDirectoryList, dass null Einträge vorhanden sind und die Liste ist wirklich leer, obwohl dort Dateien und Verzeichnisse vorhanden sind. Ich hab da mal mit der Indy-Komponente die Server-Version ausgelesen und die Strings der Liste entsprechend angepasst.
    Ich frag mich nur, wie es die proffesinellen FTP-Clients (Total Commander o.ä.) machen ? Da klappts einwandfrei, nur wie ????

    bis denne
    Jente



  • habs bisher mit meinem eigenen G6 FTP getestet. Mach mir jetzt bloss keine Angst. 😮
    muss ich gleich ma checken, was auf dem server im netz für'n proggie läuft



  • Jente schrieb:

    Ich frag mich nur, wie es die proffesinellen FTP-Clients (Total Commander o.ä.) machen ? Da klappts einwandfrei, nur wie ????

    Auch der TotalCommander benutzt keine andere Methode. Der hat einfach einen sehr intelligenten Parser. Für exotische Server kann man im TotalCommander eigene Formate (genannt Server-Typ) definieren.



  • Tach auch,

    ich hab mir jetzt folgendermassen geholfen:

    void __fastcall TFormSystem::ButtonUpdateSearchClick(TObject *Sender)
    {
      TStringList *ftpliste = new TStringList;
    
      char s[80];char v[8]; char akt[8]; char mon[4];
      int a;
      strcpy(v,ComboBox1->Text.c_str());
      strcpy(akt,v);
    
      ButtonUpdateSearch->Visible=false;
    
      //Serverversion ermitteln
      IdFTP1->Host=EditGSHostname->Text;
      IdFTP1->User="anonymous";
      IdFTP1->Password="info@nobody.de";
      Memo1->Lines->Add("Connecting..");
      IdFTP1->Connect();
      Serverversion=IdFTP1->SystemDesc;
      Memo1->Lines->Add(Serverversion);
      IdFTP1->Disconnect();
      /******************************************
      * je nach Serverversion andere Auswertung *
      ******************************************/
      if(Serverversion== " Windows_NT version 5.0")
      { //Dateidatum ermitteln
        IdFTP2->Host=Edit2->Text;
        IdFTP2->User="anonymous";
        IdFTP2->Password="info@nobody.de";
        Memo1->Lines->Add("Connecting..");
        IdFTP2->Connect();
    
        IdFTP2->List(ftpliste,".",true);
        for(a=0;a<ftpliste->Count;a++)
        { Memo1->Lines->Add(ftpliste->Strings[a]);
          if(strstr(StrLower(ftpliste->Strings[a].c_str()),"meineDatei.txt"))
          { strcpy(s,ftpliste->Strings[a].c_str());
            v[0]=s[6]; v[1]=s[7]; v[2]=s[0]; v[3]=s[1]; v[4]=s[3]; v[5]=s[4]; v[6]=0;
          }
        }
        IdFTP2->Disconnect();
      }
    
      if(Serverversion== " UNIX emulated by FileZilla")
      { //Dateidatum ermitteln
        IdFTP2->Host=Edit2->Text;
        IdFTP2->User="anonymous";
        IdFTP2->Password="info@nobody.de";
        Memo1->Lines->Add("Connecting..");
        IdFTP2->Connect();
    
        IdFTP2->List(ftpliste,".",true);
        for(a=0;a<ftpliste->Count;a++)
        { Memo1->Lines->Add(ftpliste->Strings[a]);
          strcpy(s,ftpliste->Strings[a].c_str());
          if(strstr(StrLower(ftpliste->Strings[a].c_str()),"winauf32.ver"))
          { v[0]=s[51]; v[1]=s[52]; //Jahr
            mon[0]=s[42]; mon[1]=s[43]; mon[2]=s[44]; mon[3]=0;
            if(strstr(strlwr(mon),"jan")) { v[2]=0x30; v[3]=0x31; }
            if(strstr(strlwr(mon),"feb")) { v[2]=0x30; v[3]=0x32; }
            if(strstr(strlwr(mon),"mar")) { v[2]=0x30; v[3]=0x33; }
            if(strstr(strlwr(mon),"apr")) { v[2]=0x30; v[3]=0x34; }
            if(strstr(strlwr(mon),"may")) { v[2]=0x30; v[3]=0x35; }
            if(strstr(strlwr(mon),"jun")) { v[2]=0x30; v[3]=0x36; }
            if(strstr(strlwr(mon),"jul")) { v[2]=0x30; v[3]=0x37; }
            if(strstr(strlwr(mon),"aug")) { v[2]=0x30; v[3]=0x38; }
            if(strstr(strlwr(mon),"sep")) { v[2]=0x30; v[3]=0x39; }
            if(strstr(strlwr(mon),"oct")) { v[2]=0x31; v[3]=0x30; }
            if(strstr(strlwr(mon),"nov")) { v[2]=0x31; v[3]=0x31; }
            if(strstr(strlwr(mon),"dec")) { v[2]=0x31; v[3]=0x32; }
            v[4]=s[46]; v[5]=s[47]; v[6]=0; //Tag
            //ShowMessage(v);
            IdFTP2->Disconnect();
          }
        }
      }
      ...
    }
    

    Ist zumindest ne Anregung.
    Die Serverliste müsste natürlich im Laufe der Zeit erweitert werden.

    Bis denne

    Jente


Anmelden zum Antworten