none
c#从客户端代码获取url目录中的文件 RRS feed

  • 问题

  • 各位老师:

    已知一个url地址,如“http://www.contoso.com/catalog/”,需要列出catalog目录下的所有扩展名为“.txt”的文件。
    无法使用c#的directory.GetFiles语句实现。请问解决方法。谢谢。


    ly_he

    2021年5月18日 2:25

答案

  • 你好,

    你的理解是正确的,目前我的方式就是获取html中的下载链接来获取文件名。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ly_he 2021年5月23日 0:32
    2021年5月21日 3:16
    版主

全部回复

  • 你好,

    你可以尝试下面的代码来获取url目录中的文件。

            static void Main(string[] args)
            {
                string url = "http://www.ibiblio.org/pub/Linux";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        string html = reader.ReadToEnd();
                        Regex regex = new Regex("<A HREF=\".*\">(?<name>.*)</A>");
                        MatchCollection matches = regex.Matches(html);
    
                        if (matches.Count > 0)
                        {
                            foreach (Match match in matches)
                            {
                                if (match.Success)
                                {
                                    string[] matchData = match.Groups[0].ToString().Split('\"');
                                    if(matchData[1].EndsWith("html"))
                                    {
                                        Console.WriteLine(matchData[1]);
                                    }
                                }
                            }
                        }
                    }
                }
    
                Console.ReadLine();
            }

    大概的思路是先获取url的html,然后通过正则表达式获取相关的文件。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2021年5月18日 8:08
    版主
  • Jack老师,您好:
    我的另一个问题“c#获取存放在服务器的文件的时间属性”,根据您的方法,已经完美解决。谢谢了!
    这个问题,列出URL目录中某种类型的所有文件,我还是没有解决。可能我的目的交代不清楚:
    我的想法是,在URL的目录中,就放上所需文件,比如:

    http://localhost/MyInstall/dataXB/

    里面有若干txt文本文件 (截图插不进来。单独在前面发了)

    通过客户端代码,根据“http://localhost/MyInstall/dataXB”这个既定的目录,获取所有存放在里面的文件的url地址。
    不知道我理解的对不对。您的方法好像在该目录里还有一个html文件,然后通过解析这个html网页的所有链接获取到该目录里面的文件。
    如果没有这个html文件,直接根据url,就列出“dataXB”目录中的所有txt文件,有可能吗?
    如可能,希望指点。
    多次麻烦,再次感谢!


    ly_he


    • 已编辑 ly_he 2021年5月20日 8:42
    2021年5月20日 7:08
  • 我在浏览器地址栏输入:http://localhost/MyInstall/dataXB/

    可以列出下面的文件:


    ly_he

    2021年5月20日 8:41
  • 你好,感谢您的反馈。

    我的目录里有html文件是因为我是拿的别人的链接做测试用的。

    实际上我是在下面的代码来获取当前页面的html的。

     string html = reader.ReadToEnd();

    然后通过正则表达式来获取文件的名称,最后再通过文件名的后缀来决定是不是txt文件。

    你可以把我的那个代码改成像下面这样:

                                   if(matchData[1].EndsWith("txt"))
                                    {
                                        Console.WriteLine(matchData[1]);
                                    }

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2021年5月20日 8:48
    版主
  • Jack老师,您好。

    是不是可以这样理解,想要在客户端编码,直接通过url地址里的服务器端目录,列出其下的文件是不允许的。

    必须通过服务器在该目录里的发布网页(里面提供这些文件的下载链接),解析获取该目录下的文件下载列表等信息。

    不知我的理解对不对,请老师指正。

    谢谢!


    ly_he


    • 已编辑 ly_he 2021年5月20日 11:23
    2021年5月20日 11:14
  • 你好,

    你的理解是正确的,目前我的方式就是获取html中的下载链接来获取文件名。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ly_he 2021年5月23日 0:32
    2021年5月21日 3:16
    版主
  • 谢谢Jack老师。

    在您的多次帮助下,问题都解决了。也弄明白了了一些概念。

    做了一个简单网页,在客户端程序用Webbrowser读出,可较方便获取需要的文件列表。

    望以后能继续得到您的帮助!


    ly_he

    2021年5月23日 0:35
  • Jack老师,

    不好意思,还得请教您。

    您说的“获取当前页面的html的”的意思,如果我没有理解错,应该是该目录下的一个具体html文件?可是代码里看不出来啊?

    有些糊涂了。麻烦您稍微解释一下?


    ly_he

    2021年5月24日 3:47
  • 你好,

    获取当前页面的html只是获得了字符串,并没有下载具体的文件,你可以用断点调试看下就知道了。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2021年5月24日 6:07
    版主