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

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

【C#】類來解析WebRequestMethods.Ftp.ListDirectoryDe​​tails

admin
2021年9月1日 9:6 本文熱度 4051

WebRequestMethods.Ftp.ListDirectoryDetails方法解析從FtpWebRequest響應(yīng)返回的響應(yīng)。如果所有響應(yīng)都遵循相同的格式,則很容易,但是不同的FTP服務(wù)器軟件提供不同的響應(yīng)格式。

例如,一臺服務(wù)器可能返回:

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

另一臺服務(wù)器可能會返回:

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

而且還觀察到其他差異,因此可能存在許多我尚未遇到的細(xì)微差異。

是否有人知道可以無縫處理這些情況的完全托管(不需要在Windows上訪問外部dll)的C#類?

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


該文章在 2021/9/1 9:26:53 編輯過

全部評論1

admin
2021年9月1日 9:20
public static string FTPRegexDir = @"\s*(?<size>[0-9]*)\s*(?<month>(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s*(?<day>[0-9]*)\s*(?<yearTime>([0-9]|:)*)\s*(?<fileName>.*)";          //FTP解析正則字串
public static string FTPRegexDD = @"^(\d+-\d+-\d+\s+\d+:\d+(?:AM|PM))\s+(<DIR>|\d+)\s+(.+)$";  //FTP解析正則字串

/// <summary>
/// 獲取當(dāng)前目錄下的目錄及文件
/// </summary>
/// param name="ftpfileList"></param>
/// <param name="dirName"></param>
/// <returns></returns>
public static List<ActFile> GetFtpFile(string dirName, int ilevel = 0)
{
    var ftpfileList = new List<ActFile>();
    return MethodInvoke($@"GetFtpFile({dirName})", () =>
    {
        string tempDir = dirName;
        tempDir = tempDir.Replace("http://", "/");
        if (Data.Left(tempDir, 1) == "/") { tempDir = Data.Right(tempDir, tempDir.Length - 1); }
        if (Data.Right(tempDir, 1) == "/") { tempDir = Data.Left(tempDir, tempDir.Length - 1); }
        string url = "ftp://" + ftpHostIP + ":" + ftpHostPort + "/"+ tempDir;
        try
        {
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(url));
            ftpRequest.UseBinary = true;
            ftpRequest.Credentials = new NetworkCredential(username, password);
            ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//該方法可以得到文件名稱的詳細(xì)資源
            StreamReader ftpFileListReader = new StreamReader(ftpRequest.GetResponse().GetResponseStream(), Encoding.UTF8);
            while (!ftpFileListReader.EndOfStream)
            {
                string line = ftpFileListReader.ReadLine();
                string firstChr = Data.Left(line, 1);
                string fileSize = "";
                string fileName = "";
                bool isDirTemp = false;
                if (firstChr == "d" || firstChr == "-")
                {
                    Regex FtpListDirDetailsRegex = new Regex(FTPRegexDir, RegexOptions.Compiled | RegexOptions.IgnoreCase);
                    Match match = FtpListDirDetailsRegex.Match(line);
                    fileSize = match.Groups["size"].Value;
                    fileName = match.Groups["fileName"].Value;
                }
                else
                {
                    Regex FtpListDirDetailsRegex = new Regex(FTPRegexDD, RegexOptions.Compiled | RegexOptions.IgnoreCase);
                    Match match = FtpListDirDetailsRegex.Match(line);
                    fileSize = match.Groups[2].Value;
                    fileName = match.Groups[3].Value;
                }
                if (firstChr == "d" || line.IndexOf("<DIR>") > -1)
                {
                    fileSize = "0";
                    isDirTemp = true;
                }
                ftpfileList.Add(new ActFile { isDir = isDirTemp, name = fileName, path = "/" + tempDir, level = ilevel, size = fileSize, lineStr = line });
            }
            ftpFileListReader.Close();
        }
        catch (Exception ex)
        {
            ftpfileList.Add(new ActFile { isDir = true, name = "", path = "/" + tempDir, level = ilevel, size = "0", lineStr = "FTP連接錯(cuò)誤,錯(cuò)誤原因:" + Environment.NewLine + ex.Message });
        }
        return ftpfileList;
    });
}

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