Maison >développement back-end >C++ >Comment puis-je analyser les réponses FTP ListDirectoryDetails au format variable en C# ?

Comment puis-je analyser les réponses FTP ListDirectoryDetails au format variable en C# ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-25 18:40:12783parcourir

How Can I Parse Variably Formatted FTP ListDirectoryDetails Responses in C#?

Analyse de la réponse FTP WebRequestMethods.Ftp.ListDirectoryDetails avec C#

Les serveurs FTP utilisent divers formats de réponse lors de l'exécution de la méthode WebRequestMethods.Ftp.ListDirectoryDetails, ce qui rend difficile l'analyse du contenu renvoyé. Cet article aborde ces complexités et fournit une solution C# gérée pour gérer de manière transparente différentes variations de réponse.

Défis d'analyse des réponses FTP

Les réponses FTP varient en fonction du logiciel serveur, ce qui conduit à des formats incohérents. Certains serveurs FTP utilisent un format DOS/Windows, tandis que d'autres utilisent un format *nix, introduisant des différences subtiles.

Solution C# gérée

Pour gérer ces formats de réponse variables, une solution C# gérée est présentée :

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"));
}

Ce code est compatible avec les formats de réponse DOS/Windows, extrayant les noms de fichiers/répertoires, dernière modification horodatages et tailles de fichiers.

Options alternatives

Bien que l'analyse des réponses LIST soit une approche valide, il est recommandé d'utiliser des clients FTP qui prennent en charge la commande MLSD, fournissant un format structuré et standardisé pour les inscriptions dans les annuaires. Les bibliothèques tierces, telles que WinSCP, implémentent la prise en charge MLSD et offrent des fonctionnalités supplémentaires pour la gestion FTP.

En conclusion, la solution C# fournie gère efficacement l'analyse des réponses FTP WebRequestMethods.Ftp.ListDirectoryDetails, en tenant compte de divers formats de réponse. Cependant, compte tenu des limites de la méthode LIST, il est recommandé d'explorer des options alternatives exploitant la commande MLSD pour une gestion FTP optimale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn