2012-07-06 29 views
0

如何使用c#启用目录浏览功能从URL路径中查找带有“* .zip”的文件。 例如: 如果我的网址是:http://www.example.com/myfolder/myfiles 和路径包含文件:ex1.htm,ex2.zip,ex.pdf,ex.swf, 那么我如何才能找到具有扩展名* .zip的文件名。 请帮我看看如何在URL中找到压缩文件的文件名在给定的url路径中查找zip文件的文件名

+0

这SO后可能会帮助你,它说明了如何解析URL的目录列表,HTTP://计算器。 com/questions/124492/c-sharp-httpwebrequest-command-to-get-directory-listing。分析是第一步,然后一旦你解析它,你可以过滤.zip文件 – Despertar 2012-07-06 06:19:07

+0

Tinoy,通过“查找文件”,你是否意味着要下载它?如果下载是允许的,那么我有建议,我想。 – RAJ 2012-07-06 06:34:15

+0

不,我只需要该文件夹中存在的zip文件的文件名。我认为我们可以使用正则表达式在URL的HTML文档中查找zip文件。 – 2012-07-06 06:41:35

回答

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

    } 
+0

谢谢迈克尔,Despertar,Akhil&拉吉你的宝贵意见.. – 2012-07-06 09:24:10

-1

你可以用GetFileName来获取文件名。

例如:

System.IO.Path.GetFileName(path);

OR

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

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

+0

其实我的路径是一个文件夹路径(http://www.example.com/folderpath/),我需要该目录路径中存在的zip文件的文件名。如何获得zip文件的文件名? – 2012-07-06 05:40:33

+1

所以你可以试试: var filenames = String.Join(“,”,Directory.GetFiles(@“c:\”,“* .zip”)。Select(filename => Path.GetFileNameWithoutExtension(filename))。 ToArray的()); – RAJ 2012-07-06 05:46:11

+0

Directory.GetFiles()函数仅返回目录中的文件。但是,在这里我使用的URL路径中的文件不是目录..当我们使用URL路径(http://www.example.com/filderpath/)在Directory.GetFiles..it返回异常无效的URI格式.. – 2012-07-06 05:49:10

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/ 我将离开处理你的错误/

+0

我们不能使用Directory.GetFiles,因为这里使用的是不是目录的url路径。我在使用Directory.GetFiles时遇到以下异常:URI格式不受支持。 – 2012-07-06 05:53:03

+0

我不认为你可以访问网址内的文件。看看我编辑的答案 – akhil 2012-07-06 06:03:30

+0

嗨Akhil ..我的url路径不包含zip文件。例如:如果我的网址是http://example.com/folder/那么这个文件夹路径中有很多文件...我不知道这个文件夹的文件名..我可以得到这个文件夹中的文件的文件名在收藏列表中? – 2012-07-06 06:08:15

1

除非一个FTP服务器也可以,我认为你将不得不求助于使用HttpWebRequest加载目录列表,然后解析结果以提取出<A>标签中的所有hrefs。

下面是一些示例代码:

 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值将是相对于当前目录。