使用 C# 解析可变格式目录列表的 FTP 响应
问题陈述:
在开发监控 FTP 位置的服务时,有必要解析从某个服务器收到的响应。 FtpWebRequest 使用 WebRequestMethods.Ftp.ListDirectoryDetails 方法。由于 FTP 服务器软件的响应格式存在差异,因此出现了这一挑战。例如,一台服务器可能以 Windows 风格的 DOS 格式返回响应,而另一台服务器可能遵循 Linux 风格的 UNIX 格式。
自定义 C# 解析解决方案:
虽然 FtpWebRequest 类本身并不处理这些格式变化,但我们可以创建一个自定义的 C# 解决方案。对于 DOS 样式格式,可以使用以下代码:
string pattern = "^(\d+-\d+-\d+\s+\d+:\d+(\w{2}))\s+(<DIR>|\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 != "<DIR>") ? long.Parse(s) : 0; string name = match.Groups[3].Value; Console.WriteLine("{0,-16} {1,9} {2}", name, size, modified); }
使用 MLSD 命令的现代解决方案:
更好的方法是利用 MLSD 命令,现代 FTP 服务器支持。此命令返回目录列表的标准化、机器可读格式。某些第三方库,例如 WinSCP .NET,支持 MLSD 命令并以一致的方式提供解析结果。
RemoteFileInfo[] files = session.EnumerateRemoteFiles(path, null); foreach (RemoteFileInfo file in files) { Console.WriteLine("{0,-16} {1,9} {2}", file.Name, file.Length, file.LastWriteTime); }
结论:
解析 FTP目录列表响应需要仔细处理不同的格式。虽然可以使用自定义解决方案,但使用支持现代 MLSD 命令的库更为可靠。这种方法实现了一致的解析,并简化了从 FTP 响应中提取相关文件和目录元数据的任务。
以上是如何在 C# 中可靠地解析可变格式的 FTP 目录列表?的详细内容。更多信息请关注PHP中文网其他相关文章!