如何在C#中使用FTP列出目录内容?

如何在C#中使用FTP列出目录内容?,c#,.net,ftp,directory-listing,C#,.net,Ftp,Directory Listing,如何在C#中使用FTP列出目录内容 我使用下面的代码列出目录内容与FTP它是返回XML格式的结果,但我只想目录的名称,而不是整个内容 我怎么能做到 public class WebRequestGetExample { public static void Main () { // Get the object used to communicate with the server. FtpWebRequest request = (FtpWebR

如何在C#中使用FTP列出目录内容

我使用下面的代码列出目录内容与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();
    }
}

您可能正在寻找列出目录内容的所需文件

编辑:或者您可以使用这个为您精心包装的库

尝试以下方法:

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();
FtpWebRequest ftpRequest=(FtpWebRequest)WebRequest.Create(uri);
ftpRequest.Credentials=新网络凭据(“匿名”janeDoe@contoso.com");
ftpRequest.Method=WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse响应=(FtpWebResponse)ftpRequest.GetResponse();
StreamReader StreamReader=新的StreamReader(response.GetResponseStream());
列表目录=新列表();
string line=streamReader.ReadLine();
而(!string.IsNullOrEmpty(line))
{
目录。添加(行);
line=streamReader.ReadLine();
}
streamReader.Close();

它给了我一个目录列表。。。目录字符串列表中列出的所有。。。告诉我这是否是您需要的

一些代理重新格式化目录列表,因此很难可靠地解析目录列表,除非您能保证代理不会更改

如果您想列出de目录中的文件名,您必须 (reqFTP.Proxy=null;)调用(reqFTP.Method=WebRequestMethods.Ftp.ListDirectory;)之前


希望这能帮助你

在下面的链接中有一个方法GetDirectoryInformation(),它递归地从FTP目录中获取文件和目录


获取FTP目录内容的最简单、最有效的方法:

var contents=GetFtpDirectoryContents(新Uri(“ftpDirectoryUri”)、新网络凭证(“用户名”、“密码”)

public static List GetFtpDirectoryContents(Uri requestUri,NetworkCredential NetworkCredential)
{
var directoryContents=new List();//创建空列表以稍后填充。
//使用给定的选项创建ftpWebRequest对象以获取目录内容。
var ftpWebRequest=GetFtpWebRequest(请求URI、networkCredential、WebRequestMethods.Ftp.ListDirectory);
尝试
{
使用(var ftpWebResponse=(ftpWebResponse)ftpWebRequest.GetResponse()//执行ftpWebRequest并获取其响应。
使用(var streamReader=newstreamreader(ftpWebResponse.GetResponseStream())//将目录内容列表获取为流。
{
var line=string.Empty;//行的初始默认值。
做
{
line=streamReader.ReadLine();//读取流的当前行。
添加(行);//将当前行添加到目录内容列表。
}while(!string.IsNullOrEmpty(line));//在该行有值时继续读取。
}
}
捕获(异常){}//在发生异常时不执行任何操作。
return directoryContents;//返回目录内容的所有列表:文件/子目录。
}
公共静态FtpWebRequest GetFtpWebRequest(Uri requestUri,NetworkCredential NetworkCredential,string方法=null)
{
var ftpWebRequest=(ftpWebRequest)WebRequest.Create(requestUri);//使用给定的请求Uri创建ftpWebRequest。
ftpWebRequest.Credentials=networkCredential;//设置当前ftpWebRequest的凭据。
如果(!string.IsNullOrEmpty(方法))
ftpWebRequest.Method=Method;//设置ftpWebRequest的方法,以防它有值。
return ftpWebRequest;//返回配置的ftpWebRequest。
}

当我使用PrintWorkingDirectory时,它给了我一个错误:“使用HTTP代理时不支持请求的FTP命令”FtpWebRequest=(FtpWebRequest)WebRequest.Create(uri);ftpRequest.Credentials=新的网络凭据(“…”,“…”);ftpRequest.Method=WebRequestMethods.Ftp.ListDirectory;FtpWebResponse响应=(FtpWebResponse)ftpRequest.GetResponse()//错误StreamReader StreamReader=新建StreamReader(response.GetResponseStream());字符串sResult=streamReader.ReadToEnd();streamReader.Close();尝试将代码中的ftpRequest.Method=WebRequestMethods.Ftp.ListDirectory更改为ftpRequest.Method=WebRequestMethods.Ftp.PrintWorkDirectory…@monO:“使用HTTP代理时不支持请求的Ftp命令”。我在“FtpWebResponse response=(FtpWebResponse)ftpRequest.GetResponse();”一行中遇到了此异常。您好,您的代码以XML格式返回结果。我只需要远程系统目录,因为我需要将该目录名绑定到树视图。获取XML对我不起作用。@swapnil我上面的代码(我编辑的)对你有用吗?奇怪的是,它返回我“ALT=“[DIR]”>……7月21日09:43 where“Swapnil”“是目录的名称。我不想要所有其他的东西,只是我必须在treeview中显示的目录的名称。我无法在treeview中显示所有这些细节。有什么建议或修改吗?@Swapnil Gupta,在HTML中得到结果不是代码的错,而是FTP服务器的设置。@mint hi mint我尝试了你的代码,但得到了一个对象名错误:“System.Net.Sockets.NetworkStream”。ListDirectory也以XML格式列出了结果。我只需要远程系统目录,因为我需要将目录名绑定到树视图。获取XML对我来说不起作用。谢谢。是的,我查过Chilkat图书馆,但我不想使用任何第三方。谢谢你还有其他建议吗?我认为它只会返回xml,但我可能错了。除非可以指定httpwebresponse以返回纯文本,否则您可能必须将xml解析为文本?我将使用NameSearchCondition(“.”,SearchConditionFileTypes.Directory)作为搜索条件参数ListDirectory
    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.
    }