首页 > 后端开发 > C++ > 如何在 C# 中可靠地解析可变格式的 FTP 目录列表?

如何在 C# 中可靠地解析可变格式的 FTP 目录列表?

Patricia Arquette
发布: 2024-12-28 20:22:21
原创
858 人浏览过

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

使用 C# 解析可变格式目录列表的 FTP 响应

问题陈述:

在开发监控 FTP 位置的服务时,有必要解析从某个服务器收到的响应。 FtpWebRequest 使用 WebRequestMethods.Ftp.ListDirectoryDe​​tails 方法。由于 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板