¿Cómo enumerar el contenido del directorio con FTP en C #?

¿Cómo enumerar el contenido del directorio con FTP en C #?

Estoy usando el código a continuación para mostrar el contenido del directorio con FTP, está devolviendo el resultado en formato XML, pero solo quiero el nombre del directorio y no el contenido completo.

Como puedo hacer eso ?

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

Prueba esto:

 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 directories = new List(); string line = streamReader.ReadLine(); while (!string.IsNullOrEmpty(line)) { directories.Add(line); line = streamReader.ReadLine(); } streamReader.Close(); 

Me dio una lista de directorios … todos listados en la lista de cadenas de directorios … dime si eso es lo que necesitas

Probablemente estés buscando PrintWorkingDirectory

Necesita ListDirectory que enumera los contenidos del directorio

EDITAR: O puede usar esta biblioteca Chilkat que lo envuelve muy bien para usted

Algunos proxies vuelven a formatear la lista de directorios, por lo que es bastante difícil analizar una lista de directorios de manera confiable a menos que pueda garantizar que el proxy no cambie.

Hay un método GetDirectoryInformation () en el siguiente enlace que busca archivos y directorios recursivamente desde un directorio FTP.

Obtener archivos del directorio FTP recursivamente

La manera más simple y eficiente de obtener contenido del directorio FTP:

var contents = GetFtpDirectoryContents (new Uri (“ftpDirectoryUri”), nuevo NetworkCredential (“userName”, “password”));

  public static List GetFtpDirectoryContents(Uri requestUri, NetworkCredential networkCredential) { var directoryContents = new List(); //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. } 

Si desea listar el nombre de los archivos que están dentro del directorio, debe poner (reqFTP.Proxy = null;) antes de invocar (reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;).

¡Espero que esto le pueda ayudar!