使用C# 解析可變格式目錄列表的FTP 響應
問題陳述:
在開發監控FTP 位置的服務時,有必要解析從某個伺服器收到的回應。 FtpWebRequest 使用 WebRequestMethods.Ftp.ListDirectoryDetails 方法。由於 FTP 伺服器軟體的回應格式存在差異,因此出現了這項挑戰。例如,一台伺服器可能以 Windows 風格的 DOS 格式回傳回應,而另一台伺服器可能遵循 Linux 風格的 UNIX 格式。
自訂 C# 解析解決方案:
雖然 FtpWebRequest 類別本身並不會處理這些格式變化,但我們可以建立一個自訂的 C# 解決方案。對於DOS 樣式格式,可以使用以下程式碼:
string pattern = "^(\d+-\d+-\d+\s+\d+:\d+(\w{2}))\s+(<DIR>|\d+)\s+(.*)$"; Regex regex = new Regex(pattern); 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} {1,9} {2}", name, size, modified); }
使用MLSD 指令的現代解決方案:
更好的方法是利用MLSD 指令,現代FTP伺服器支援。此命令傳回目錄清單的標準化、機器可讀格式。某些第三方程式庫,例如 WinSCP .NET,支援 MLSD 命令並以一致的方式提供解析結果。
RemoteFileInfo[] files = session.EnumerateRemoteFiles(path, null); foreach (RemoteFileInfo file in files) { Console.WriteLine("{0,-16} {1,9} {2}", file.Name, file.Length, file.LastWriteTime); }
結論:
解析 FTP目錄清單回應需要仔細處理不同的格式。雖然可以使用自訂解決方案,但使用支援現代 MLSD 命令的程式庫更為可靠。這種方法實現了一致的解析,並簡化了從 FTP 回應中提取相關檔案和目錄元資料的任務。
以上是如何在 C# 中可靠地解析可變格式的 FTP 目錄清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!