首頁 > 後端開發 > C++ > 如何在 C# 中解析 FTP ListDirectoryDe​​​​tails 回應以可靠地提取文件資訊?

如何在 C# 中解析 FTP ListDirectoryDe​​​​tails 回應以可靠地提取文件資訊?

DDD
發布: 2024-12-27 21:08:13
原創
765 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板