Как найти файлы с «*.zip» по URL-адресу с включенным просмотром каталогов с помощью С#. Например: если мой URL: http://www.example.com/myfolder/myfiles и путь состоит из файлов: ex1.htm,ex2.zip,ex.pdf,ex.swf, тогда как я могу найти имя файла с расширением *.zip. Пожалуйста, помогите мне, как найти имя файла zip-файла в URL-адресе
Найдите имя файла zip-файла в заданном URL-адресе
Ответы (4)
Если FTP-сервер также не доступен, я думаю, вам придется прибегнуть к загрузке списка каталогов с помощью HttpWebRequest
, а затем анализировать результаты, чтобы извлечь все hrefs в тегах ‹A>.
Вот пример кода:
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 будут относиться к текущему каталогу.
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-адреса, где имена файлов прикреплены в конце/я оставлю вам обработку ошибок/
По предложению Михаила я получил решение вопроса следующим образом:
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);
}
}
}
}
Вы можете использовать GetFileName
для получения имени файла.
Например:
System.IO.Path.GetFileName(path);
OR
Вы можете попробовать следующее, чтобы получить имя файла из каталога:
var filenames = String.Join(", ", Directory.GetFiles(@"c:\", "*.zip").Select(filename => Path.GetFileNameWithoutExtension(filename)).ToArray());