FTP dir/list Rückgabe auswerten (Zeit/Timestamp)

13/07/2008 - 16:06 von Thomas Hübner | Report spam
Hi NG,

folgendes kriege ich als FTP Directory.

200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 44 Jun 26 2007 bin
drwxr-xr-x 2 0 0 6 May 23 2007 logos
drwxr-xr-x 2 0 0 4096 Jun 15 14:48 record
drwxr-xr-x 7 0 0 64 Jun 19 2007 varo
226 Directory send OK.
FTP: 64d Bytes empfangen in 0,02Sekunden 15,63KB/s

Ich möchte nun für einen kleinen FTP client die Timestamp, Dateiname und
extension in einen korrekten Datentyp "Date" bzw. String bekommen. Wie
man an oben gezeigtem Listing erkennt kommt vom FTP Server ziemliche
"Grütze". Ich habe hierzu folgenden Ansatz. Geht das auch
einfacher/besser? Die Eintràge kommen zeilenweise

oben:
Imports System.Text.RegularExpressions

Const MONTHLIST As String =
"Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec"




Private Function get_File_name_from_FTP_String(ByVal ftpSTR As
String) As String
Return Regex.Match(ftpSTR, _
"(" & MONTHLIST &
")\s\d{2}(\s{2}|\s{1})(\d{2}\W{1}\d{2}|\d{4}).*").Value.Substring(13)
End Function

Private Function get_file_Extension_from_FTP_String(ByVal ftpSTR As
String)
If ftpSTR.Substring(0, 1) = "d" Then
Return "<DIR>"
Else
Dim extHelpArray As Array
extHelpArray = ftpSTR.Split(".")
Return extHelpArray(extHelpArray.Length - 1)
End If
End Function
Private Function get_Date_from_FTP_String(ByVal ftpSTR As String)
As Date
Dim dateParts As Array
Dim tmpDate As Date
Dim strTemp As String = Regex.Match(ftpSTR, _
"(" & MONTHLIST &
")\s\d{2}\s{2}\d{4}").Value
If strTemp = "" Then 'then we got a time instead of a year
strTemp = Regex.Match(ftpSTR, _
"(" & MONTHLIST &
")\s\d{2}\s{1}\d{2}\W{1}\d{2}").Value
dateParts = Split(strTemp, " ")
'because no year we take actual year
tmpDate = DateSerial(Date.Now.Year, _
resMonth(dateParts(0)), dateParts(1))
'calc time to minutes and add to Date
Return DateAdd(DateInterval.Minute, _
(dateParts(2).split(":")(0) * 60) +
dateParts(2).split(":")(1), _
tmpDate)
Else 'only year - no time avail
dateParts = Split(strTemp, " ")
Return DateSerial(dateParts(3), _
resMonth(dateParts(0)), _
dateParts(1))
End If
End Function
Private Function resMonth(ByVal inMonth As String) As Byte
Dim mArr As Array = Split(MONTHLIST, "|")
For i As Byte = 0 To mArr.Length - 1
If mArr(i) = inMonth Then Return i + 1
Next
End Function
 

Lesen sie die antworten

#1 Thomas Hübner
14/07/2008 - 16:00 | Warnen spam
Thomas Hübner schrieb:
Hi NG,

folgendes kriege ich als FTP Directory.

200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 44 Jun 26 2007 bin
drwxr-xr-x 2 0 0 6 May 23 2007 logos
drwxr-xr-x 2 0 0 4096 Jun 15 14:48 record
drwxr-xr-x 7 0 0 64 Jun 19 2007 varo
226 Directory send OK.
FTP: 64d Bytes empfangen in 0,02Sekunden 15,63KB/s

Ich möchte nun für einen kleinen FTP client die Timestamp, Dateiname und
extension in einen korrekten Datentyp "Date" bzw. String bekommen. Wie
man an oben gezeigtem Listing erkennt kommt vom FTP Server ziemliche
"Grütze". Ich habe hierzu folgenden Ansatz. Geht das auch
einfacher/besser? Die Eintràge kommen zeilenweise



zumindest das mit der File Extension mußte ich schon erweitern auf
Symlinks (Linux) und "keine Extension"
Private Function get_file_Extension_from_FTP_String(ByVal ftpSTR As
String)
If ftpSTR.Substring(0, 1) = "d" Then
Return "<DIR>"
ElseIf ftpSTR.Substring(0, 1) = "l" Then
Return "<LINK>"
Else
Dim extHelpArray As Array
If ftpSTR.Contains(".") Then
extHelpArray = ftpSTR.Split(".")
Return extHelpArray(extHelpArray.Length - 1)
Else
Return ""
End If
End If
End Function

Gibt es da nichts fertiges für FTP Kommunikation? Ich finde diesen
String- aufdrösel- Regex- Ansatz irgendwie "dreckig" :-(
Ich nutze die FTP Klasse aus "TransData" - einem hier oft empfohlenen
FTP Client in VB.NET

Gruß,
Thomas

Ähnliche fragen