2017-07-14 3 views
0

からファイルextentionsを除外する:C#が、私はこの機能部分であるforeach文を持つforeach文

try 
{ 
    string pathToFiles = sourceTB.Text; 
    DirectoryInfo dirInfo = new DirectoryInfo(pathToFiles); 
    int i = 0; 

    foreach (var files in dirInfo.EnumerateFiles()) 
    { 
    //Do stuff here 
    } 
    MessageBox.Show("Process Successful", "Completed"); 
} 
catch 
{ 
    MessageBox.Show("Process failed", "Failed"); 
} 

それが選択したフォルダの内容全体を読み込みますように、私はそれをコーディングできるようにしたいと思います(これは正常に動作していますが)、特定のファイル拡張子を持つファイルをスキップするようにしています。

例として、フォルダ内のすべてのファイルが.txtファイルであり、.jpgファイルを除外したい場合。

私は達成するためのいくつかの方法を試してみましたが、このような:

var allFilesFromFolder = Directory.GetFiles(pathToFiles); 
var filesToExclude = Directory.GetFiles(pathToFiles, "*.jpg"); 
var filetoInclude = allFilesFromFolder.Except(filesToExclude); 

と、この:

var files = Directory.GetFiles(pathToFiles).Where(name => !name.EndsWith(".jpg")); 

が、これらの両方が、foreachループ内のコードと文句を言わないフィット感ににエラーをもたらしますファイルを循環するとき。

これを達成する方法はありますか?

+3

コードにどのような誤りが含まれていますか?説明してください – Steve

+1

正確には何がうまくいかないのですか?あなたのコード(少なくとも2番目の変種)は大丈夫です。 –

+1

[特定の拡張子のDirectory.GetFiles](https://stackoverflow.com/questions/13301053/directory-getfiles-of-certain-extension)の可能な複製 –

答えて

2

あなたが処理しない拡張子のリストを作成し、その後のFileInfoクラスを列挙しながら、

List<string> excluded = new List<string>() {".jpg", ".png"}; 
foreach (var file in dirInfo.EnumerateFiles().Where(x => !excluded.Contains(x.Extension)) 
{ 
    //Do stuff here 
} 
+0

完璧に動作します。ありがとうございました! – lostintranslation

+1

変数の命名についてのちょっとした注意で、単なる 'var file'でなければなりません。私はOPに複数形があることを知っていますが、それは誤植であるか、または 'foreach'ループの誤った理解を反映しているので、受け入れられた答えに修正があると良いでしょう。 –

+0

@RacilHilanのコメントに感謝私は他の人が読めるように自分のコードの清潔さを改善しようとしていますので、あなたの投稿に感謝します。 – lostintranslation

0

DirectoryInfo.EnumerateFilesによって、あなたがそれをやろうとしている道を返されたそのリストを使用することができます正常に動作する必要がありますが、あなたはまた、あなたの元のコード内のパターンを含むことができ、例えば、これはあなたにすべてのテキストファイルを提供します:

foreach (var file in dirInfo.EnumerateFiles("*.txt")) 
{ 
    //Do stuff here 
} 

別のアプローチは、元のコードを維持して、内部の拡張を入れてチェックすることです:

foreach (var file in dirInfo.EnumerateFiles("*.txt")) 
{ 
    if(file.Extension == ".jpg") 
    continue; 

    //Do stuff here 
} 
関連する問題