ASP.NET C# 在 ftp 上搜索文件(更好的代码)

本文关键字:更好 代码 文件 搜索 NET ftp ASP | 更新日期: 2023-09-27 18:33:47

希望我像我在想的那样解释这一点

我有一个网络应用程序,其中包含来自供应商列表的产品。例如,www.example.com.au/Browse.aspx?SupplierID=XYZ 仅显示 XYZ 供应商的产品。然后,这将转到详细信息页面 www.example.com.au/Product.aspx?ProductID=123。此页面显示该产品的详细信息列表(图像库、产品数据表,即 PDF 等(。

现在,每个供应商都有一个ftp帐户,他可以在其中上传他们的产品信息 - ftp://resources.example.com.au,这可以通过 resources.example.com.au/*访问。因此,假设供应商 XYZ 将具有以下内容:

resources.example.com.au/XYZ/123.jpg <== main product image
resources.example.com.au/XYZ/123_a.jpg <== secondary image
resources.example.com.au/XYZ/123_b.jpg <== secondary image
resources.example.com.au/XYZ/123_c.jpg <== secondary image

(由于应用程序要求,Web 应用位于与资源文件夹不同的服务器上(

现在,要获取相关产品图片的列表,我有以下内容:

public List<string> GetFiles(string strDirectoryName, string strStartsWith)
{
    List<string> files = new List<string>();
    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPUrl + strDirectoryName));
    request.Method = WebRequestMethods.Ftp.ListDirectory;
    request.Credentials = new NetworkCredential(strFtpUser, strFtpPassword);
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream);
    while (!reader.EndOfStream)
    {
        string filename = reader.ReadLine().ToString();
        if (filename.Length > 4)
        {
            if (!string.IsNullOrEmpty(strStartsWith))
            {
                if (filename.StartsWith(strStartsWith, StringComparison.OrdinalIgnoreCase))
                {
                    files.Add(filename);
                }
            }
        }
    }
    response.Close();
    responseStream.Close();
    reader.Close();
    return files;
}

不幸的是,这个函数会遍历所有文件(可能大约 100,000 个(,并且只选择我需要的文件。

我的问题:有没有更好的方法来只过滤我需要的图像,而不是遍历整个目录?

或者,也许是获取这些图像的另一种方法?

ASP.NET C# 在 ftp 上搜索文件(更好的代码)

我没有找到使用过滤器执行目录列表 Ftp 请求的方法,但我可能有办法提高解决方案的性能。

您可以启动一个新线程,该线程每 x 分钟获取一次 directoryList 并将结果存储在内存中。
如果您正在寻找一个文件,您可以从内存中提供列表(大大提高性能(,但风险是找不到该文件(此时您可以执行当前代码(。在最坏的情况下,内存搜索操作会导致一些开销,但与具有如此大结果集的 ftp 请求相比,它应该可以忽略不计。