Hi.
Beschäftige mich jetzt mit Netzwerkgeschichten.
Versuche grade einen FTP Clienten zu programmieren.
Das Verbinden und Dateiliste empfangen klappt wunderbar.
Das Empfange sieht dann in etwa so aus:
-rw-r--r-- 1 251003ftp3 251003 92747 Jun 14 09:42 bild.jpg
drwxr-xr-x 2 251003ftp3 251003 4096 Jun 14 09:52 test
Weiß nun nicht genau wie ich das voneinander trennen kann, um es mit Treeview anzeigen zu lassen, also nach Berechtigungen, Owner, Datum, Dateityp, Datei/Ordnername.
Hat einer ne Idee?
MFg
evo2
Ich denke die Werte sind über ein Tabstop getrennt? Falls ja, könntest Du die über \t ermitteln und splitten.
Hallo evo2,
bin mir ziemlich sicher, dass da nichts mit Tabs getrennt ist. Ich würde Regex verwenden.
herbivore
Poste doch mal den Quellcode ...
Hallo Rufnex,
welchen Quellcode? Ich hoffe du meinst nicht im Ernst, dass ich das für dich ausprogrammieren soll. Beispiel findest du in der Doku und über die Forumssuche.
herbivore
Ich meinte evo2 ... damit man testen kann welche Daten bei seiner Anwendung geliefert werden.
Hallo Rufnex,
hups, da bin ich etwas durcheinander gekommen, sorry.
damit man testen kann welche Daten bei seiner Anwendung geliefert werden.
Welche Daten geliefert werden, hat er doch schon geschrieben.
herbivore
Jo das hat er .. ich hätte heute mal etwas Zeit gehabt, das selbst bei mir auf meinem FTP zu testen ;o)
so hab mir da jetzt mal was gebastelt. Ist sicherlich nicht der beste Code, aber funktioniert soweit 😉
Hab erstmal zum testen alles auf string gelassen, muß dann noch konvertiert werden und das Datum/Zeit richtig dargestellt werden, aber es wird erstmal alles getrennt.
public void FTPList_Parsen(string Zeile)
{
string rechte_Seite;
string[] temp;
//Ist Zeile Ordner(d), Datei(-) oder Link(l)
Ordner = Zeile.Substring(0, 1);
//Rechte
Rechte = Zeile.Substring(1, 9);
//der Reststring ohne Rechte. Also ab Zeichen 10 bis Stringlänge-10(weil wir fangen ja erst an bei 10 zu zählen)
rechte_Seite = Zeile.Substring(10, Zeile.Length-10);
//die Leerzeichen links entfernen
rechte_Seite = rechte_Seite.Trim();
//Nach dem Leerzeichen String splitten, um die Anzahl der Verweise zu erhalten
temp = rechte_Seite.Split(' ');
Verweise = temp[0];
//die länge der Verweise bestimmen und das von unserem rechte_Seite string wieder entfernen, da wir es nicht mehr brauchen
//Leerzeichen am Anfang und Ende gleich wieder entfernen
rechte_Seite = rechte_Seite.Substring(Verweise.Length, rechte_Seite.Length - Verweise.Length);
rechte_Seite = rechte_Seite.Trim();
//Jetzt wieder nach dem Leerzeichen String splitten, um den Besitzer der Datei zu erhalten
temp = rechte_Seite.Split(' ');
Besitzer = temp[0];
//die länge der Besitzer bestimmen und das von unserem rechte_Seite string wieder entfernen, da wir es nicht mehr brauchen
//Leerzeichen am Anfang und Ende gleich wieder entfernen
rechte_Seite = rechte_Seite.Substring(Besitzer.Length, rechte_Seite.Length - Besitzer.Length);
rechte_Seite = rechte_Seite.Trim();
//Jetzt wieder nach dem Leerzeichen String splitten, um die Gruppe der Datei zu erhalten
temp = rechte_Seite.Split(' ');
Gruppe = temp[0];
//die länge der Gruppe bestimmen und das von unserem rechte_Seite string wieder entfernen, da wir es nicht mehr brauchen
//Leerzeichen am Anfang und Ende gleich wieder entfernen
rechte_Seite = rechte_Seite.Substring(Gruppe.Length, rechte_Seite.Length - Gruppe.Length);
rechte_Seite = rechte_Seite.Trim();
//Jetzt wieder nach dem Leerzeichen String splitten, um die Gruppe der Datei zu erhalten
temp = rechte_Seite.Split(' ');
Groesse = temp[0];
//die länge der Groesse bestimmen und das von unserem rechte_Seite string wieder entfernen, da wir es nicht mehr brauchen
//Leerzeichen am Anfang und Ende gleich wieder entfernen
rechte_Seite = rechte_Seite.Substring(Groesse.Length, rechte_Seite.Length - Groesse.Length);
rechte_Seite = rechte_Seite.Trim();
//Jetzt wieder nach dem Leerzeichen String splitten, um die Gruppe der Datei zu erhalten
//ab jetzt ist alles nur noch durch 1 leerzeichen getrennt, kann also gleich der komplette rest zugewiesen werden
temp = rechte_Seite.Split(' ');
Monat = temp[0];
Tag = temp[1];
Zeit = temp[2];
Name = temp[3];
}
Für die, die es interessiert:
die LIST Replys von FTP-Servern sollten in der Regel dem ls command unter linux entsprechen und so aufgebaut sein:
Antwort:
drwxr-xr-x 2 251003ftp3 251003 4096 Jun 14 09:52 test
Bedeutung:
Stellen
1. Teil: 1 Dateiart (d = Ornder, - = Datei, l(L) = Link)
3 Rechte des User
3 Rechte der Gruppe
3 Rechte für andere
(r = Lesen, w = Schreiben, x = Ausführen)
LEERZEICHEN
2. Teil Verweise auf die Datei(also Datei kann verschiedene Namen haben, ist physikalisch nur einmal vorhanden)
LEERZEICHEN
3. Teil Name des Eigentümers
LEERZEICHEN
4. Teil Gruppenzugehörigkeit der Datei
LEERZEICHEN
5. Teil Größe der Datei in Bytes
LEERZEICHEN
6. Teil Letzte Änderung - Monat
LEERZEICHEN
7. Teil Letzte Änderung - Tag
LEERZEICHEN
8. Teil Letzte Änderung - Uhrzeit
LEERZEICHEN
9. Teil Datei/Ornder Name
Danke für eure Hilfe.
Mfg
evo2
Hallo evo2,
äh, mit Regex hättest du das alles in einer Zeile haben können.
herbivore
Hallo.
Hatte das auch zuerst mit regex probiert, aber nicht so recht hinbekommen.
Deswegen hab ich "meinen" Weg eingeschlagen.
mfg
evo2
Hallo evo2,
Regex zu lernen ist eine lohnende Investition. Und auch wenn manche finden, dass Regex kryptisch aussehen, so kyptisch wie das entsprechende Programm ohne Regex sehen sie nie aus. 🙂
herbivore
So einfach wäre z.B: die Trennung und umweltgerechte Entsorgung der Spaces
string strSource="drwxr-xr-x 2 251003ftp3 251003 4096 Jun 14 09:52 test";
string[] stringParts=System.Text.RegularExpressions.Regex.Split(strSource,@"\s+");
Liefert somit die 9 Teile des Strings wie von evo2 beschrieben.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Beschäftige mich jetzt mit Netzwerkgeschichten.
Versuche grade einen FTP Clienten zu programmieren.
Das Verbinden und Dateiliste empfangen klappt wunderbar.Das Empfange sieht dann in etwa so aus:
Dumme frage wenn du dich mit "Netzwerkgeschichten" beschäftigst warum eine Textdatei?
Lies doch gleich den FTP aus.
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Hallo LastGentleman,
die Antwort des FTP-Servers ist plain text.
herbivore
Das wust ich nicht aber selbst mit simpler WININET-API kann ich das Verzeichniss auslesen.
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein