FTP-ListDirectoryDetails-Antworten mit C# analysieren
Beim Überwachen von FTP-Standorten auf Aktualisierungen ist es wichtig, Informationen aus den von den WebRequestMethods zurückgegebenen Antworten zu extrahieren. Ftp.ListDirectoryDetails-Methode. Allerdings weisen unterschiedliche FTP-Server-Software unterschiedliche Antwortformate auf, was eine Herausforderung beim Parsen darstellt.
Problemstellung
Angesichts der beiden gängigen Antwortformate (DOS/Windows und *nix) Die Aufgabe besteht darin, eine vollständig verwaltete C#-Klasse zu finden, die diese Unterschiede nahtlos verarbeitet und Folgendes extrahiert Details:
Antwort
DOS/Windows Auflistungen
Für das erste Antwortformat (DOS/Windows) analysiert der folgende C#-Code effektiv die Antwort:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/"); request.Credentials = new NetworkCredential("user", "password"); request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream()); string pattern = @"^(\d+-\d+-\d+\s+\d+:\d+(?:AM|PM))\s+(<DIR>|\d+)\s+(.+)$"; Regex regex = new Regex(pattern); IFormatProvider culture = CultureInfo.GetCultureInfo("en-us"); 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} size = {1,9} modified = {2}", name, size, modified.ToString("yyyy-MM-dd HH:mm")); }
Dieser Code erzeugt die gewünschte Ausgabe:
Version2 size = 0 modified = 2011-08-10 12:02 image34.gif size = 144700153 modified = 2009-06-25 14:41 updates.txt size = 144700153 modified = 2009-06-25 14:51 digger.tif size = 144700214 modified = 2010-11-04 14:45
Andere (*nix) Einträge
Für andere *nix Auflistungen wird die Verwendung des MLSD-Befehls empfohlen. MLSD gibt ein maschinenlesbares Listenformat zurück, sodass keine komplexe Analyse erforderlich ist.
Alternative Bibliotheken
Die Verwendung der FtpWebRequest-Klasse kann für diesen Zweck unzuverlässig sein. Erwägen Sie die Verwendung von Bibliotheken von Drittanbietern wie der WinSCP .NET-Assembly, die MLSD unterstützt und auf den LIST-Befehl zurückgreifen kann, um verschiedene Antwortformate zu verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich FTP-ListDirectoryDetails-Antworten in C# analysieren, um Dateiinformationen zuverlässig zu extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!