在给定的URL路径中找到zip文件的文件名

时间:2012-07-06 05:27:15

标签: c# file url zip file-extension

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

中找到zip文件的文件名

4 个答案:

答案 0 :(得分:1)

除非FTP服务器也可用,我认为您将不得不求助于使用HttpWebRequest加载目录列表,然后解析结果以提取< A>中的所有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值将相对于当前目录。

答案 1 :(得分:0)

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 我将把错误处理留给你/

答案 2 :(得分:0)

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

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);
                  }
            }
       }

   }

答案 3 :(得分:-1)

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

例如:

System.IO.Path.GetFileName(path);

OR

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

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