0

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

4

4 回答 4

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 值将与当前目录相关。

于 2012-07-06T06:53:26.380 回答
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);
                  }
            }
       }

   }
于 2012-07-06T09:21:54.173 回答
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/我将把错误处理留给你/

于 2012-07-06T05:47:15.190 回答
-1

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

例如:

System.IO.Path.GetFileName(path);

或者

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

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

于 2012-07-06T05:36:18.747 回答