2017-01-26 2 views
0

Ich habe Code, der den Namen aller DLL-Dateien in einem Verzeichnis in einer Rich-Textbox zeigt. Wie könnte ich alle Dateinamen, die ich als unwichtig angegeben habe, filtern/verbergen und den Rest behalten?Wie kann ich Zeilen in einer Richtextbox herausfiltern?

Beispiel:

Actual Verzeichnis enthält: 1.dll, 2.dll, 3.dll

Rich Textbox zeigt: 1.dll, 3.dll weil 2.dll als unwichtig in der angegeben wird Code.

Code Ich habe derzeit, dass alle Dateien anzeigt.

DirectoryInfo r = new DirectoryInfo(@"E:\SteamLibrary\steamapps\common\Grand Theft Auto V"); 
FileInfo[] rFiles = r.GetFiles("*.dll"); 
string rstr = ""; 
foreach (FileInfo rfile in rFiles) 
{ 
    rstr = rstr + rfile.Name + "                            "; 
} 
string strfinalR; 
strfinalR = richTextBox3.Text + rstr; 
richTextBox3.Text = (strfinalR); 
+0

hinzufügen ignorable DLLs auf ein HashSet dann testen mit .Contains() in der Schleife, zu ignorieren, wenn wahr. –

+1

'r.GetFiles (" *. Dll "). Wobei (file =>! New string [] {" 2 "," 8 "} .Any (Typ => file.Name.Contains (type)));' Dabei kann 'new string [] {" 2 "," 8 "}' früher als Member-Feld/-Eigenschaft deklariert werden. –

+0

Warum nicht einfach eine einfache 'if'-Anweisung in Ihrer' foreach'-Schleife verwenden? –

Antwort

1

einfach eine schwarze Liste machen:

string[] blacklist = new string[] { "2", "1337" }; 

und filtern Sie die Dateinamen in Ihrem foreach

foreach(FileInfo rFile in rFiles) 
{ 
    if(blacklist.Any(bl => rFile.Name.Contains(bl))) 
     continue; 
    // your code 
} 

oder wenn Sie Dateien abrufen von r

r.GetFiles("*.dll").Where(file => !blacklist.Any(type => file.Name.Contains(type))).ToArray(); 
+0

Wenn ich versuche, bekomme ich: System.io.fileinfo enthält keine Definition für contain. – Shayna

+0

Ich habe auch versucht, es in r.GetFiles zu implementieren, aber ich bekam dann: Typ 'System.Collections.Generic.IEnumerables' kann nicht implizit in 'System.IO.FIleInfo []' konvertiert werden Eine explizite Konvertierung existiert. – Shayna

+0

@Shayna lesen Sie die bearbeitete Antwort. Fehler sagten alles. –

0

Eine Möglichkeit besteht darin, eine Liste von Dateien zu erstellen, die ignoriert werden sollen, und dann alle Dateien mit Ausnahme der Dateien in der Ignorierliste abzurufen. Etwas wie folgt aus:

//ignore list 
List<string> filesToIgnore = new List<string>() { "2.dll", "some_other.dll" }; 

//get files and filter them    
DirectoryInfo r = new DirectoryInfo(@"E:\SteamLibrary\steamapps\common\Grand Theft Auto V"); 

List<FileInfo> rFiles = r.GetFiles("*.dll").Where(x => !filesToIgnore.Contains(x.Name)).ToList(); 

//your existing code follows 
string rstr = ""; 
foreach (FileInfo rfile in rFiles) 
{ 
    rstr = rstr + rfile.Name + "                            "; 
} 
string strfinalR; 
strfinalR = richTextBox3.Text + rstr; 
richTextBox3.Text = (strfinalR); 
Verwandte Themen