You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从网站获取文件名列表?C#提取指定URL下JPG文件名

嘿,这个需求我刚好做过类似的!要从www.demo.com/public这个公开目录里获取所有.jpg文件名列表,得先确认一件事:这个目录必须开启了服务器的目录浏览功能——要是网站没开这个,服务器不会返回文件列表页面,咱们的方法可就用不了啦。

具体实现步骤

1. 准备依赖包

要解析目录页面的HTML内容,我推荐用HtmlAgilityPack这个工具包,它处理HTML节点非常方便。你可以通过NuGet安装它:

  • 用Package Manager控制台:Install-Package HtmlAgilityPack
  • 用.NET CLI:dotnet add package HtmlAgilityPack

2. 编写C#代码

下面是完整的实现代码,我加了详细注释,你可以直接参考:

首先引入必要的命名空间:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;

然后写核心方法:

public static async Task<List<string>> GetJpgFileNamesFromPublicDir(string targetUrl)
{
    var jpgFileNames = new List<string>();

    // 注意:实际项目里建议复用HttpClient,不要每次调用都新建,避免socket资源耗尽
    using var httpClient = new HttpClient();

    try
    {
        // 获取目标目录页面的HTML内容
        var pageHtml = await httpClient.GetStringAsync(targetUrl);

        // 加载HTML到HtmlDocument对象,方便解析节点
        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(pageHtml);

        // 提取页面中所有带href属性的<a>标签(目录浏览页面里的文件链接都在这里)
        var allLinks = htmlDoc.DocumentNode.SelectNodes("//a[@href]");

        if (allLinks != null)
        {
            foreach (var linkNode in allLinks)
            {
                var hrefValue = linkNode.GetAttributeValue("href", string.Empty);
                
                // 筛选条件:是.jpg结尾的文件,同时排除上级目录的../链接
                if (!string.IsNullOrWhiteSpace(hrefValue) 
                    && hrefValue.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)
                    && !hrefValue.StartsWith("../"))
                {
                    // 提取文件名(如果href是完整URL,Path.GetFileName也能正确获取最后一段)
                    var fileName = System.IO.Path.GetFileName(hrefValue);
                    if (!string.IsNullOrWhiteSpace(fileName))
                    {
                        jpgFileNames.Add(fileName);
                    }
                }
            }
        }
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"请求页面时出错:{ex.Message}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"发生未知错误:{ex.Message}");
    }

    return jpgFileNames;
}

调用示例:

public static async Task Main(string[] args)
{
    var targetDirectoryUrl = "https://www.demo.com/public";
    var jpgFiles = await GetJpgFileNamesFromPublicDir(targetDirectoryUrl);

    // 输出所有获取到的.jpg文件名
    foreach (var fileName in jpgFiles)
    {
        Console.WriteLine($"找到文件:{fileName}");
    }
}

3. 关键注意事项

内容的提问来源于stack exchange,提问作者Yogesh Dangre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:43:12