【问题标题】:FTP Directory/SubDirectory listing using edtFTPnet,C#使用 edtFTPnet,C# 列出 FTP 目录/子目录
【发布时间】:2012-10-29 11:58:39
【问题描述】:

在我的 FTP 服务器上,我有以下文件夹结构

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

SD 的数量不固定。我需要一种方法来获取所有文件(可以是任何格式),而无需从父目录中获取 .old 扩展名。 我目前正在使用 3rd 方 dll edtFTPnet。

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

这有助于我获取当前工作目录级别的文件和文件夹的详细信息。

谁能告诉我一种获取父目录、子目录和嵌套子目录的所有文件的方法。

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

【问题讨论】:

    标签: c# ftp ftpwebrequest


    【解决方案1】:

    FTPConnection.GetFileInfos() 返回一个FTPFile 的数组。 FTPFile 类有一个布尔属性Dir,它指示它的文件名是访问文件(假)还是目录(真)。

    这样的事情应该可以工作:

    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 类,因为它的方法和命名约定更清晰,文档更好,并且更容易在线查​​找参考。

    【讨论】:

    • 嘿,非常感谢..我最初确实检查了 FtpWebRequest,但令人惊讶的是没有找到太多的参考/文档。您能否提供一些链接。我还发现处理 ftpfiles 或其他数据类型比处理 FTPResponse 返回的流数据更容易......
    【解决方案2】:

    尝试使用这样的扩展:

    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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2011-03-18
      • 1970-01-01
      • 2013-04-30
      相关资源
      最近更新 更多