首页 > 后端开发 > C++ > 如何在 C# 中解析 FTP ListDirectoryDe​​tails 响应以可靠地提取文件信息?

如何在 C# 中解析 FTP ListDirectoryDe​​tails 响应以可靠地提取文件信息?

DDD
发布: 2024-12-27 21:08:13
原创
716 人浏览过

How Can I Parse FTP ListDirectoryDetails Responses in C# to Extract File Information Reliably?

使用 C# 解析 FTP ListDirectoryDe​​tails 响应

监视 FTP 位置的更新时,必须从 WebRequestMethods 返回的响应中提取信息。 Ftp.ListDirectoryDe​​tails 方法。然而,不同的 FTP 服务器软件呈现不同的响应格式,给解析带来了挑战。

问题陈述

给出两种常见的响应格式(DOS/Windows 和 *nix) ,任务是找到一个完全托管的 C# 类,可以无缝处理这些差异并提取以下内容详细信息:

  • 文件/目录名称
  • 上次更新或创建时间戳
  • 文件/目录大小

答案

DOS/Windows列表

对于第一个响应格式(DOS/Windows),以下 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"));
}
登录后复制

此代码将产生所需的输出:

Version2         size =         0  modified = 2011-08-10 12:02
image34.gif      size = 144700153  modified = 2009-06-25 14:41
updates.txt      size = 144700153  modified = 2009-06-25 14:51
digger.tif       size = 144700214  modified = 2010-11-04 14:45
登录后复制

其他 (*nix)列表

对于其他 *nix 列表,建议使用 MLSD 命令。 MLSD 返回机器可读的列表格式,无需进行复杂的解析。

替代库

为此目的使用 FtpWebRequest 类可能不可靠。考虑使用第三方库,例如 WinSCP .NET 程序集,它支持 MLSD,并且可以回退到 LIST 命令来处理各种响应格式。

以上是如何在 C# 中解析 FTP ListDirectoryDe​​tails 响应以可靠地提取文件信息?的详细内容。更多信息请关注PHP中文网其他相关文章!

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