首頁 > 後端開發 > 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 伺服器在執行WebRequestRequest​​.時使用不同的回應格式,使得解析回傳的內容變得困難。本文解決了這些複雜性,並提供了一個託管 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板