"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo analizar de manera confiable los listados de directorio FTP formateados de forma variable en C#?

¿Cómo puedo analizar de manera confiable los listados de directorio FTP formateados de forma variable en C#?

Publicado el 2025-03-23
Navegar:789

How Can I Reliably Parse Variably Formatted FTP Directory Listings in C#?

analizando las respuestas ftp para el listado de directorio con formatos variables usando c#

Declaración de problemas:

en el desarrollo de un servicio para monitor WebRequestMethods.ftp.ListDirectoryDetails Método. El desafío surge debido a las variaciones en los formatos de respuesta en el software del servidor FTP. Por ejemplo, un servidor podría devolver una respuesta en un formato DOS de estilo Windows, mientras que otro podría adherirse a un formato UNIX de estilo Linux.

Custom C# Parsing Solución:

aunque la clase FTPWEBREBRECEST más no maneja estas variaciones de format, una puede crear una solución personalizada C#. Para el formato de estilo DOS, se puede utilizar el siguiente código:

string pattern = "^(\\ d -\\ d -\\ d \\ s \\ d: \\ d (\\ w {2})) \\ s ( | \\ d) \\ s (.*) $"; Regex regex = new regex (patrón); while (! Reader.endofstream) { string line = Reader.readline (); Match Match = Regex.Match (línea); cadena S = Match.groups [1] .Value; DateTime modificado = DateTime.ParseExact (s, "MM-DD-YY HH: MMTT", Culture, DateTimestyles.None); s = Match.groups [2] .Value; Tamaño largo = (s! = "")? Long.Parse (s): 0; name de cadena = match.groups [3] .Value; Console.WriteLine ("{0, -16} {1,9} {2}", nombre, tamaño, modificado); }
string pattern = "^(\\d -\\d -\\d \\s \\d :\\d (\\w{2}))\\s (|\\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 != "") ? long.Parse(s) : 0;
    string name = match.Groups[3].Value;

    Console.WriteLine("{0,-16} {1,9}  {2}", name, size, modified);
}

Solución moderna usando el comando mlsd:

Un mejor enfoque es aprovechar el comando mlsd, que es compatible con los servidores FTP modernos. Este comando devuelve un formato estandarizado y legible por máquina para listados de directorio. Ciertas bibliotecas de terceros, como WinsCP .NET .NET, admiten el comando MLSD y proporcionan resultados analizados de manera consistente.

remoteFileInfo [] archivos = session.enumeraterAtEmotefiles (ruta, nulo); foreach (archivo remotoFileInfo en archivos) { Console.WriteLine ("{0, -16} {1,9} {2}", file.name, file.length, file.lastwriteTime); }
string pattern = "^(\\d -\\d -\\d \\s \\d :\\d (\\w{2}))\\s (|\\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 != "") ? long.Parse(s) : 0;
    string name = match.Groups[3].Value;

    Console.WriteLine("{0,-16} {1,9}  {2}", name, size, modified);
}

conclusión:

analizar las respuestas de listado del directorio FTP requiere un manejo cuidadoso de formatos variables. Si bien es posible una solución personalizada, es más confiable utilizar bibliotecas que admiten el comando MLSD moderno. Este enfoque обеспечивает analizar y simplifica la tarea de extraer metadatos de archivos y directorio relevantes de las respuestas FTP.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3