使用 C# 解析 FTP ListDirectoryDetails 回應
監視 FTP 位置的更新時,必須從 WebRequestMethods 傳回的回應中擷取資訊。 Ftp.ListDirectoryDetails 方法。然而,不同的 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 ListDirectoryDetails 回應以可靠地提取文件資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!