1

次のコード行を使用して、入力したパスの下にあるすべてのファイルのリストを取得しています。

Files = Directory.GetFiles(path, ".", SearchOption.AllDirectories);

ただし、すべてのファイルを取得するのではなく、特定のファイル拡張子を持つファイルを除外したいと思います。1行に1つのファイル拡張子( " .pdf"、 "。dll"など)を持つテキストファイルから無視するファイル拡張子のリストを読んでいます。次のコードを使用して、テキストファイルから無視するファイル拡張子のリストを読み込みます。

  ArrayList line = new ArrayList();
  using (StreamReader reader = new StreamReader(Server.MapPath("~/TextFile.txt")))
  {
      while (!reader.EndOfStream)
      {
          line.Add(reader.ReadLine());
      }
   }

私の質問は、これらのファイル拡張子のいずれかに一致するファイルを含まないようにファイル検索を制限するにはどうすればよいですか?これらのタイプのファイルを文字列配列に追加したくありませんFiles

4

4 に答える 4

3
Files = Directory.GetFiles(path, ".", SearchOption.AllDirectories)
.Where(fileName => !line.Contains(Path.GetExtension(fileName))
.ToList();
于 2012-07-12T13:59:44.407 に答える
2

arraylist に追加する前に拡張子を確認してください。

string file = reader.ReadLine();
if (!stringArrayWithExtensions.Contains(Path.GetExtension(file).ToLower()))
    line.Add(file);
于 2012-07-12T13:58:36.503 に答える
1

あなたの質問を少し読んで、答えはノーです。あなたが望むことをするための「簡単な」方法はないと思います。

最初にすべてのファイル名を読み取り、拡張子に基づいて手動でフィルタリングする必要があります ( System.IO.Path.GetExtensionを参照してください)。

于 2012-07-12T13:58:41.337 に答える
1

除外するファイル拡張子のリストを指定することはできないため、完全なリストを取得して自分でフィルター処理する必要があります。たとえば、次のようなものが機能するはずです。

List<string> fileExtensionsToIgnore = new List<String>(File.ReadAllLines("~/TextFile.txt"));
List<string> fileList = new List<string>();
foreach (string filePath in Directory.GetFiles(Path, ".", SearchOption.AllDirectories))
{
    if (!fileExtensionsToIgnore.Contains(Path.GetExtension(filePath).ToLower())
        fileList.Add(filePath);
}
string[] files = fileList.ToArray();
于 2012-07-12T14:02:32.447 に答える