狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#類如何解析WebRequestMethods.Ftp.ListDirectoryDetails FTP響應?

admin
2021年7月9日 14:58 本文熱度 4677

我正在創建一個服務來監視FTP位置以獲得新的更新,并需要使用WebRequestMethods.Ftp.ListDirectoryDetails方法來解析從FtpWebRequest響應返回的響應。 如果所有響應遵循相同的格式,這將是相當容易的,但不同的FTP服務器軟件提供不同的響應格式。

例如,可以返回:

08-10-11  12:02PM       <DIR>          Version2

06-25-09  02:41PM            144700153 image34.gif

06-25-09  02:51PM            144700153 updates.txt

11-04-10  02:45PM            144700214 digger.tif

另一臺服務器可能會返回:

d--x--x--x    2 ftp      ftp        4096 Mar 07  2002 bin
-rw-r--r--    1 ftp      ftp       659450 Jun 15 05:07 TEST.TXT
-rw-r--r--    1 ftp      ftp     101786380 Sep 08  2008 TEST03-05.TXT
drwxrwxr-x    2 ftp      ftp        4096 May 06 12:24 dropoff

有誰知道完全托管(不需要訪問Windows上的外部DLL)C#類,可以無縫地處理這些情況?

我只需要列出具有以下詳細信息的目錄的內容:文件/目錄名稱,上次更新或創建的時間戳。



使用Regex構建了一個簡單的解決方案,使用捕獲組解析每一行中的相關信息:

public static Regex FtpListDirectoryDetailsRegex = new Regex(@".*(?(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s*(?[0-9]*)\s*(?([0-9]|:)*)\s*(?.*)", RegexOptions.Compiled | RegexOptions.IgnoreCase);

然后,可以通過以下方法從捕獲組中提取值:

        string ftpResponse = "-r--r--r-- 1 ftp ftp              0 Nov 19 11:08 aaa.txt";
        Match match = FtpListDirectoryDetailsRegex.Match(ftpResponse);
        string month = match.Groups["month"].Value;
        string day = match.Groups["day"].Value;
        string yearTime = match.Groups["yearTime"].Value;
        string fileName = match.Groups["fileName"].Value;

有些不值得注意的事情是:

  • 這只適用于上面ftpResponse變量中描述的格式的目錄響應。 在我的情況下,我很幸運,每次只能訪問同一個FTP服務器,所以響應格式不太可能改變。
  • yearTime變量可以代表文件時間戳的年份或時間。 您將需要通過查找冒號的一個實例來手動解析:character將指示此捕獲組包含一個時間而不是年份。

實際上試圖解析ListDirectoryDetails不是正確的選擇。

你希望使用支持現代MLSD命令的FTP客戶端,該命令以RFC 3659中指定的機器可讀格式返回目錄列表。解析古代LIST命令返回的可讀格式(由FtpWebRequest內部使用 應該使用ListDirectoryDetails方法作為最后的選擇,當與不支持MLSD命令的過時的FTP服務器(如Microsoft IIS FTP服務器)交談時。

例如對于WinSCP .NET程序集,可以使用其Session.ListDirectorySession.EnumerateRemoteFiles方法。

他們在內部使用MLSD命令,但可以回退到LIST命令并支持數十種不同的可讀格式的列表格式。

返回的列表被顯示為具有以下屬性的RemoteFileInfo實例的集合:

  • Name
  • LastWriteTime(有正確的時區)
  • Length
  • FilePermissions(分析為個人權利)
  • Group
  • Owner
  • IsDirectory
  • IsParentDirectory
  • IsThisDirectory

大多數其他第三方庫也會這樣做。 為此,使用FtpWebRequest是不可靠的。 不幸的是,.NET框架中沒有其他內置的FTP客戶端。


該文章在 2021/7/9 15:03:26 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved