首页 > 后端开发 > C++ > 如何在 C# 中解析可变格式的 FTP ListDirectoryDe​​tails 响应?

如何在 C# 中解析可变格式的 FTP ListDirectoryDe​​tails 响应?

Susan Sarandon
发布: 2024-12-25 18:40:12
原创
783 人浏览过

How Can I Parse Variably Formatted FTP ListDirectoryDetails Responses in C#?

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

FTP 服务器在执行 WebRequestMethods.Ftp.ListDirectoryDe​​tails 方法时使用不同的响应格式,使得解析返回的内容变得困难。本文解决了这些复杂性,并提供了一个托管 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.ListDirectoryDe​​tails 响应解析,并考虑到不同的响应格式。但是,考虑到 LIST 方法的局限性,建议探索利用 MLSD 命令的替代选项,以实现最佳 FTP 管理。

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

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