繁体   English   中英

一次调用FtpClient以递归列出目录

[英]Call FtpClient once to list directories recursively

我有一个递归函数:

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的单个实例,所以不需要继续创建新实例吗?

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM