【问题标题】:Call FtpClient once to list directories recursively调用 FtpClient 一次以递归方式列出目录
【发布时间】:2015-05-06 08:54:13
【问题描述】:

我有一个递归函数:

class FtpFolder{
public void ListChildren(IFolder folder)
{
    Uri uri = new Uri("ftp://127.0.0.1/");
    FtpClient ftpClient = new FtpClient();
    ftpClient.Host = uri.Host;
    ftpClient.Credentials = new NetworkCredential("UserLocal", "1234");
    ftpClient.SetWorkingDirectory(folder.FullName);
    foreach (FtpListItem item in ftpClient.GetListing(ftpClient.GetWorkingDirectory(), FtpListOption.Modify | FtpListOption.Size))
    {
        switch (item.Type)
        {
            case FtpFileSystemObjectType.Directory:
                FtpFolder ftpSubFolder = new FtpFolder(item);
                folder.Folders.Add(ftpSubFolder);
                ListChildren(ftpSubFolder);
                break;
            case FtpFileSystemObjectType.File:
                folder.Files.Add(new FtpFile() { Item = item });
                break;
        }
    }
}
}

这是我的班级联系

class Connection{
private uri Uri;
private string Username;
private string Password
public connection(uri _uri, string _username, _password){
_uri=Uri; _username=Username; _password=Password;
}
public void connect(){
}
}

我使用这个递归函数来列出来自 FTP 服务器的所有文件。我的问题是我可以重复使用 FtpClient 的单个实例,这样我就不需要继续重新创建一个新实例了吗?

【问题讨论】:

  • 我已经改写了你的问题,我 99% 确定这是你的意思,但请检查这是正确的解释。
  • 是的,这就是我的意思

标签: c# ftp ftp-client


【解决方案1】:

试试这个:

public void ListChildren(IFolder folder)
{
    FtpClient ftpClient = new FtpClient
    {
        Host = new Uri("ftp://127.0.0.1/").Host,
        Credentials = new NetworkCredential("UserLocal", "1234");
    };
    ftpClient.SetWorkingDirectory(folder.FullName);

    ListChildren(ftpClient, ftpClient.GetWorkingDirectory());
}

private void ListChildren(FtpClient ftpClient, IFolder folder)
{
    foreach (FtpListItem item in folder, FtpListOption.Modify | FtpListOption.Size))
    {
        switch (item.Type)
        {
            case FtpFileSystemObjectType.Directory:
                FtpFolder ftpSubFolder = new FtpFolder(item);
                folder.Folders.Add(ftpSubFolder);

                ListChildren(ftpSubFolder);
                break;
            case FtpFileSystemObjectType.File:
                folder.Files.Add(new FtpFile { Item = item });
                break;
        }
    }
}

【讨论】:

  • 我如何在其他类中使用它,我的意思是我有其他类名连接以及从 Windows 窗体获得的主机、用户名和密码的值,我将函数 listchildren 放在 ftpfolder 类中
  • @holmesfansL 请用更多代码更新您的问题。
猜你喜欢
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2013-07-01
相关资源
最近更新 更多