Heim > Backend-Entwicklung > C++ > Wie kann ich FTP-ListDirectoryDetails-Antworten in C# analysieren, um Dateiinformationen zuverlässig zu extrahieren?

Wie kann ich FTP-ListDirectoryDetails-Antworten in C# analysieren, um Dateiinformationen zuverlässig zu extrahieren?

DDD
Freigeben: 2024-12-27 21:08:13
Original
776 Leute haben es durchsucht

How Can I Parse FTP ListDirectoryDetails Responses in C# to Extract File Information Reliably?

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:

  • Datei-/Verzeichnisname
  • Zuletzt aktualisierte oder erstellte Zeitstempel
  • Datei-/Verzeichnisgröße

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"));
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage