使用C# 解析FTP WebRequestMethods.Ftp.ListDirectoryDetails 回應
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.ListDirectoryDetails 回應解析,並考慮到不同的回應格式。但是,考慮到 LIST 方法的局限性,建議探索利用 MLSD 命令的替代選項,以實現最佳 FTP 管理。
以上是如何在 C# 中解析可變格式的 FTP ListDirectoryDetails 回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!