【问题标题】:Find the file name of zip file in the given url path在给定的 url 路径中查找 zip 文件的文件名
【发布时间】:2012-07-06 05:27:15
【问题描述】:

如何在使用 c# 启用目录浏览的 url 路径中查找带有“*.zip”的文件。 例如: 如果我的网址是:http://www.example.com/myfolder/myfiles 路径由以下文件组成:ex1.htm,ex2.zip,ex.pdf,ex.swf, 那么如何找到扩展名为 *.zip 的文件名。 请帮助我如何在 URL 中找到 zip 文件的文件名

【问题讨论】:

  • 这篇 SO 帖子可能会对您有所帮助,它解释了如何解析 url 的目录列表 stackoverflow.com/questions/124492/… 。解析是第一步,解析后就可以过滤 .zip 文件
  • Tinoy,“查找文件”是指下载吗?如果允许下载,我想我有建议。
  • 不,我只需要该文件夹中存在的 zip 文件的文件名。我认为我们可以使用正则表达式在 url 的 HTML 文档中查找 zip 文件..
  • 是的,我也在想同样的事情

标签: c# file url zip file-extension


【解决方案1】:

除非 FTP 服务器也可用,否则我认为您将不得不求助于使用 HttpWebRequest 加载目录列表,然后解析结果以提取 标记中的所有 href。

这里是一些示例代码:

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                string html = reader.ReadToEnd();
                Console.WriteLine("Parsing {0}", html);
                Regex regex = new Regex("href=\\\"([^\\\"]*)", RegexOptions.IgnoreCase);
                MatchCollection matches = regex.Matches(html);
                if (matches.Count > 0)
                {
                    foreach (Match match in matches)
                    {
                        if (match.Success)
                        {
                            Console.WriteLine("Found {0}", match.Captures[0]);
                        }
                    }
                }
            }
        }

请注意,您获得的 href 值将与当前目录相关。

【讨论】:

    【解决方案2】:
    string[] s = Directory.GetFiles(path);
            int i = 0;
            while (i < s.Length)
            {
                if (s[i].Substring((s[i].IndexOf(".") + 1), 3).Equals("zip"))
                {
                    Response.Write(s[i].ToString());
                    i = i + 1;
                }
            }
    

    试试这个。

    编辑

    int slashIndex = url.lastIndexOf('/'); 
    int dotIndex = url.lastIndexOf('.zip', slashIndex);
    String filenameWithoutExtension; 
    if (dotIndex == -1) 
    {   
         filenameWithoutExtension = url.substring(slashIndex + 1); 
    } 
    else 
    {   
         filenameWithoutExtension = url.substring(slashIndex + 1, dotIndex); 
    } 
    

    这适用于最后附加文件名的 URL/ 我将把错误处理留给你/

    【讨论】:

    • 我们不能使用 Directory.GetFiles 因为这里使用的是 url 路径而不是目录。使用 Directory.GetFiles 时出现以下异常:不支持 URI 格式。
    • 我认为您无法访问 Web url 中的文件。看看我编辑的答案
    • 嗨 Akhil.. 我的 url 路径不包含 zip 文件。例如:如果我的网址是example.com/folder,那么此文件夹路径中有很多文件...我不知道此文件夹的文件名..我可以在收藏列表中获取此文件夹中文件的文件名吗??
    • 但我猜不能直接浏览到网站的文件夹。
    • 但是Akhil,我们可以通过在IIS中启用目录浏览来浏览网站的文件夹..
    【解决方案3】:

    按照迈克尔的建议,我得到了问题的解决方案如下:

    string urlpath = "http://www.example.com/folder/"
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlpath);
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
           using (StreamReader reader = new StreamReader(response.GetResponseStream()))
           {
               string html = reader.ReadToEnd();
               Regex regEx = new Regex(@".*/(?<filename>.*?)\.zip");
               MatchCollection matches = regEx.Matches(html);
               if (matches.Count > 0)
               {
                    foreach (Match match in matches)
                    {
                      if (match.Success)
                      {
    
                        Console.WriteLine(match.Groups["filename"].Value);
                      }
                }
           }
    
       }
    

    【讨论】:

      【解决方案4】:

      您可以使用GetFileName 获取文件名。

      例如:

      System.IO.Path.GetFileName(path);

      您可以尝试以下方法从目录中获取文件名:

      var filenames = String.Join(", ", Directory.GetFiles(@"c:\", "*.zip").Select(filename =&gt; Path.GetFileNameWithoutExtension(filename)).ToArray());

      【讨论】:

      • 其实我的路径是一个文件夹路径(example.com/folderpath),我需要这个目录路径中存在的zip文件的文件名..我怎样才能得到zip文件的文件名??跨度>
      • 所以你可以试试: var filenames = String.Join(", ", Directory.GetFiles(@"c:\", "*.zip").Select(filename => Path.GetFileNameWithoutExtension (文件名)).ToArray());
      • Directory.GetFiles() 函数只返回目录中的文件。但是在这里我使用的是 url 路径而不是目录中的文件。当我们在 Directory.GetFiles 中使用 url 路径 (example.com/filderpath) 时,它返回异常无效的 URI 格式..
      • 您可以只创建一个 System.Uri 对象,并使用 IsFile 验证它是一个文件,然后使用 Uri.LocalPath 提取文件名。
      • Url 位置有很多文件。我必须将 Url 位置中的所有文件提取到本地目录才能找到 zip 文件。您能否建议任何其他方法而不将所有文件从 url 位置提取到本地路径??
      猜你喜欢
      • 2018-03-20
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 2014-03-13
      • 1970-01-01
      相关资源
      最近更新 更多