Parsen von FTP-Antworten für Verzeichnislisten mit variablen Formaten unter Verwendung von C#
Problemstellung:
Bei der Entwicklung eines Dienstes zur Überwachung von FTP-Standorten wird es notwendig, die von einem FtpWebRequest empfangene Antwort mithilfe von zu analysieren WebRequestMethods.Ftp.ListDirectoryDetails-Methode. Die Herausforderung entsteht durch Unterschiede in den Antwortformaten verschiedener FTP-Serversoftware. Beispielsweise könnte ein Server eine Antwort in einem DOS-Format im Windows-Stil zurückgeben, während ein anderer einem UNIX-Format im Linux-Stil folgen könnte.
Benutzerdefinierte C#-Parsing-Lösung:
Obwohl die FtpWebRequest-Klasse diese Formatvariationen nicht nativ verarbeitet, kann man eine benutzerdefinierte C#-Lösung erstellen. Für das DOS-Format kann der folgende Code verwendet werden:
string pattern = "^(\d+-\d+-\d+\s+\d+:\d+(\w{2}))\s+(<DIR>|\d+)\s+(.*)$"; Regex regex = new Regex(pattern); while (!reader.EndOfStream) { string line = reader.ReadLine(); Match match = regex.Match(line); string s = match.Groups[1].Value; DateTime modified = DateTime.ParseExact(s, "MM-dd-yy hh:mmtt", culture, DateTimeStyles.None); s = match.Groups[2].Value; long size = (s != "<DIR>") ? long.Parse(s) : 0; string name = match.Groups[3].Value; Console.WriteLine("{0,-16} {1,9} {2}", name, size, modified); }
Moderne Lösung mit MLSD-Befehl:
Ein besserer Ansatz besteht darin, den MLSD-Befehl zu nutzen , das von modernen FTP-Servern unterstützt wird. Dieser Befehl gibt ein standardisiertes, maschinenlesbares Format für Verzeichnislisten zurück. Bestimmte Bibliotheken von Drittanbietern, wie z. B. WinSCP .NET, unterstützen den MLSD-Befehl und liefern geparste Ergebnisse auf konsistente Weise.
RemoteFileInfo[] files = session.EnumerateRemoteFiles(path, null); foreach (RemoteFileInfo file in files) { Console.WriteLine("{0,-16} {1,9} {2}", file.Name, file.Length, file.LastWriteTime); }
Fazit:
Parsing FTP Verzeichnislistenantworten erfordern einen sorgfältigen Umgang mit unterschiedlichen Formaten. Obwohl eine benutzerdefinierte Lösung möglich ist, ist es zuverlässiger, Bibliotheken zu verwenden, die den modernen MLSD-Befehl unterstützen. Dieser Ansatz ermöglicht eine konsistente Analyse und vereinfacht die Aufgabe, relevante Datei- und Verzeichnismetadaten aus FTP-Antworten zu extrahieren.
Das obige ist der detaillierte Inhalt vonWie kann ich variabel formatierte FTP-Verzeichnislisten in C# zuverlässig analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!