2012-05-10 13 views
0

私は思っているようにこれを説明します。ASP.NET C#でftpでファイルを検索する(より良いコード)

私はサプライヤーのリストから製品を持つWebアプリケーションを持っています。例えば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; 
} 

残念ながら、この関数は(約10万のをすることができた)すべてのファイルを経由して、私は必要なファイルだけを選択します。

私の質問:ディレクトリ全体を調べるのではなく、必要な画像だけをフィルタリングする方法がありますか?

また、これらの画像を取得する別の方法はありますか?

答えて

0

フィルタを使用してdirectoryList Ftpリクエストを行う方法が見つかりませんでしたが、ソリューションのパフォーマンスを向上させる方法がある可能性があります。

x分ごとにdirectoryListを取得し、結果をメモリに格納する新しいスレッドを開始できます。
ファイルを探している場合は、ファイルを見つけられないリスク(現在のコードを実行できる時点)でメモリからリストを提供することができます(パフォーマンスが大幅に向上します)。最悪の場合のシナリオでは、メモリー検索操作で少しのオーバーヘッドが発生しますが、そのような大きな結果セットを持つftpリクエストに比べて無視できないはずです。

関連する問題