簡體   English   中英

使用edtFTPnet,C#列出FTP目錄/子目錄

[英]FTP Directory/SubDirectory listing using edtFTPnet,C#

在我的FTP服務器上,我有以下文件夾結構

 - Parent Directory
   -a.txt
   -b.txt.old
   -SubDirectory1
     -c.txt
     -NestedSubDirectory1
       -d.txt
   -SubDirectory2
     -e.txt
     -f.txt.old

SD的數量不固定。 我需要一種方法來獲取所有文件(可以是任何格式),而不使用父目錄中的.old擴展名。 我目前正在使用第三方dll edtFTPnet。

ftpConnection.GetFileInfos()Where(f => !(f.Name.EndsWith(".old"))).ToList();

這有助於我獲取當前工作目錄級別的文件和文件夾的詳細信息。

有人能告訴我一種方法來獲取父目錄,子目錄和嵌套子目錄的所有文件。

解決方案可能使用也可能不使用edtFTPnet。

FTPConnection.GetFileInfos()返回一個FTPFile數組。 FTPFile有一個布爾屬性Dir ,它指示其文件名是訪問文件(false)還是目錄(true)。

這樣的事情應該有效:

void ReadSubDirectories(FTPConncetion connection, FTPFile[] files)
{
    foreach (var file in files)
    {
        if (file.Dir)
        {
            // Save parent directory
            var curDir = connection.ServerDirectory;

            // Move into directory
            connection.ChangeWorkingDirectory(file.Name)

            // Read all files
            ReadSubDirectories(connection, connection.GetFileInfos());

            // Move back into parent directory
            connection.ChangeWorkingDirectory(curDir)
        }
        else
        {
            // Do magic with your files
        }
    }
}

但是,您可能最好只使用.NET的內置FtpWebRequest類,因為它的方法和命名約定更清晰,更好地記錄,並且更容易在線查​​找引用。

嘗試使用這樣的擴展:

class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new FTPConnection
            {
                ServerAddress = "127.0.0.1",
                UserName = "Admin",
                Password = "1",
            })
            {


                connection.Connect();
                connection.ServerDirectory = "/recursive_folder";
                var resultRecursive =
                    connection.GetFileInfosRecursive().Where(f => !(f.Name.EndsWith(".old"))).ToList();
                var resultDefault = connection.GetFileInfos().Where(f => !(f.Name.EndsWith(".old"))).ToList();


            }

        }
    }

    public static class FtpClientExtensions
    {
        public static FTPFile[] GetFileInfosRecursive(this FTPConnection connection)
        {
            var resultList = new List<FTPFile>();
            var fileInfos = connection.GetFileInfos();
            resultList.AddRange(fileInfos);
            foreach (var fileInfo in fileInfos)
            {
                if (fileInfo.Dir)
                {
                    connection.ServerDirectory = fileInfo.Path;
                    resultList.AddRange(connection.GetFileInfosRecursive());
                }
            }
            return resultList.ToArray();
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM