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 aufdanke 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.txtBeispiel 2:
Windows_NT version 5.0
06-05-03 11:33AM 36261 aender.txt
03-12-03 09:32AM 401 barcode.txtEs 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