LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

我正在創(chuàng)建一個服務來監(jiān)視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#類,可以無縫地處理這些情況?

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



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

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不是正確的選擇。

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

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

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

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

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

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


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

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲中精品级在线 | 日韩成AV人网站在线影院 | 亚洲欧美高清精品一区二区 | 久久国产精品久久香蕉 | 日韩精品一区二区三区在线播放 | 在线观看亚洲人成网站 |