使用 C# 解析 FTP WebRequestMethods.Ftp.ListDirectoryDetails 响应
FTP 服务器在执行 WebRequestMethods.Ftp.ListDirectoryDetails 方法时使用不同的响应格式,使得解析返回的内容变得困难。本文解决了这些复杂性,并提供了一个托管 C# 解决方案来无缝处理不同的响应变化。
FTP 响应解析挑战
FTP 响应因服务器软件而异,导致格式不一致。一些 FTP 服务器使用 DOS/Windows 格式,而其他服务器则采用 *nix 格式,从而引入了细微的差异。
托管 C# 解决方案
要处理这些可变响应格式,提供了一个托管的 C# 解决方案:
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")); }
此代码与 DOS/Windows 响应格式兼容,提取文件/目录名称、上次修改时间戳和文件大小。
替代选项
虽然解析 LIST 响应是一种有效的方法,但建议使用支持 MLSD 的 FTP 客户端命令,为目录列表提供结构化和标准化格式。 WinSCP 等第三方库实现了 MLSD 支持,并为 FTP 管理提供了附加功能。
总而言之,提供的 C# 解决方案可以有效处理 FTP WebRequestMethods.Ftp.ListDirectoryDetails 响应解析,并考虑到不同的响应格式。但是,考虑到 LIST 方法的局限性,建议探索利用 MLSD 命令的替代选项,以实现最佳 FTP 管理。
以上是如何在 C# 中解析可变格式的 FTP ListDirectoryDetails 响应?的详细内容。更多信息请关注PHP中文网其他相关文章!