首頁 > 後端開發 > C++ > 如何在 C# 中可靠地解析可變格式的 FTP 目錄清單?

如何在 C# 中可靠地解析可變格式的 FTP 目錄清單?

Patricia Arquette
發布: 2024-12-28 20:22:21
原創
859 人瀏覽過

How Can I Reliably Parse Variably Formatted FTP Directory Listings in C#?

使用C# 解析可變格式目錄列表的FTP 響應

問題陳述:

在開發監控FTP 位置的服務時,有必要解析從某個伺服器收到的回應。 FtpWebRequest 使用 WebRequestMethods.Ftp.ListDirectoryDe​​tails 方法。由於 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板