Как перечислить содержимое каталога с FTP в C#?

Как перечислить содержимое каталога с FTP в C# ?

Я использую ниже код для списка содержимого каталога с FTP, он возвращает результат в формате XML, но я хочу только имя каталога, а не весь контент.

Как я могу это сделать ?

public class WebRequestGetExample
{
    public static void Main ()
    {
        // Get the object used to communicate with the server.
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/");
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

        // This example assumes the FTP site uses anonymous logon.
        request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        Console.WriteLine(reader.ReadToEnd());

        Console.WriteLine("Directory List Complete, status {0}", response.StatusDescription);

        reader.Close();
        response.Close();
    }
}

MSDN

7 ответов


попробуйте это:

FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
ftpRequest.Credentials =new NetworkCredential("anonymous","janeDoe@contoso.com");
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());

List<string> directories = new List<string>();

string line = streamReader.ReadLine();
while (!string.IsNullOrEmpty(line))
{
    directories.Add(line);
    line = streamReader.ReadLine();
}

streamReader.Close();

Он дал мне список каталогов... все перечисленные в списке каталогов строки... скажите мне, если это то, что вам нужно


вы, вероятно, ищете PrintWorkingDirectory


вам нужно ListDirectory это список содержимого каталога

EDIT: или вы можете использовать этот Chilkat библиотека, которая обертывает его красиво для вас


некоторые прокси переформатируют список каталогов, поэтому довольно сложно надежно проанализировать список каталогов, если вы не можете гарантировать, что прокси не изменится


существует метод GetDirectoryInformation () в следующей ссылке, которая рекурсивно извлекает файлы и каталоги из каталога FTP.

получение файлов из каталога FTP рекурсивно


самый простой и эффективный способ получить содержимое каталога FTP:

ВАР содержание = GetFtpDirectoryContents(новый URI("ftpDirectoryUri"), новый а networkcredential("логин", "пароль"));

    public static List<string> GetFtpDirectoryContents(Uri requestUri, NetworkCredential networkCredential)
    {
        var directoryContents = new List<string>(); //Create empty list to fill it later.
        //Create ftpWebRequest object with given options to get the Directory Contents. 
        var ftpWebRequest = GetFtpWebRequest(requestUri, networkCredential, WebRequestMethods.Ftp.ListDirectory);
        try
        {
            using (var ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse()) //Excute the ftpWebRequest and Get It's Response.
            using (var streamReader = new StreamReader(ftpWebResponse.GetResponseStream())) //Get list of the Directory Contentss as Stream.
            {
                var line = string.Empty; //Initial default value for line.
                do
                {
                    line = streamReader.ReadLine(); //Read current line of Stream.
                    directoryContents.Add(line); //Add current line to Directory Contentss List.
                } while (!string.IsNullOrEmpty(line)); //Keep reading while the line has value.
            }
        }
        catch (Exception) { } //Do nothing incase of Exception occurred.
        return directoryContents; //Return all list of Directory Contentss: Files/Sub Directories.
    }

    public static FtpWebRequest GetFtpWebRequest(Uri requestUri, NetworkCredential networkCredential, string method = null)
    {
        var ftpWebRequest = (FtpWebRequest)WebRequest.Create(requestUri); //Create FtpWebRequest with given Request Uri.
        ftpWebRequest.Credentials = networkCredential; //Set the Credentials of current FtpWebRequest.

        if (!string.IsNullOrEmpty(method))
            ftpWebRequest.Method = method; //Set the Method of FtpWebRequest incase it has a value.
        return ftpWebRequest; //Return the configured FtpWebRequest.
    }

Если вы хотите перечислить имя файлов, которые находятся внутри каталога de, вы должны поместить (reqFTP.Прокси = null;) перед вызовом (reqFTP.Method = WebRequestMethods.Программа передачи файлов.ListDirectory;).

надеюсь, это поможет вам!