2016-11-24 4 views
-4

Ich habe ein kleines Problem mit startswith.StartsWith gibt nicht wahr

string[] MatchedFiles = Directory 
    .GetFiles(this.sReportDirectory, "*", SearchOption.AllDirectories) 
    .Where(s => s.StartsWith(this.sProjectNumber + "_InputCounts", StringComparison.CurrentCultureIgnoreCase)) 
    .ToArray(); 

Ich muss einige weitere Dateien filtern, aber es funktioniert nicht einmal mit einem. Array ist immer leer! Es funktioniert jedoch mit enthält?

Ich habe alle String-Vergleiche versucht.

Könnte jemand erklären, was ich falsch mache?

Oder gibt es eine bessere Möglichkeit, Dateizählungen mit mehreren Filtern zu erhalten, die dann durch das Array aller Dateien gehen?

Ich bin mit Visual Studio 2015

Dank

+2

Können Sie bitten Sie Code hier posten - Seitenregeln sind hier Postleitzahlen, nicht woanders, sonst könnte das anderswo gehen und dann macht deine Frage keinen Sinn – BugFinder

+0

Auch mit dem Code macht die Frage keinen Sinn - wir würden das auch tun o brauchen Beispiele für die Dateinamen in den Ordnern. – PaulF

+0

Was ist 'sReportDirectory'? Was ist "Projektnummer"? Was sind die Verzeichnisnamen? Diese Frage ist nicht zu beantworten. –

Antwort

3

Directory.GetFiles gibt den vollständigen Pfad zu der Datei, so dass Sie zuerst den Pfad abstreifen müssen würden. z.B. mit Path.GetFileName:

string[] MatchedFiles = Directory 
    .GetFiles(this.sReportDirectory, "*", SearchOption.AllDirectories) 
    .Where(s => Path.GetFileName(s).StartsWith(this.sProjectNumber + "_InputCounts", StringComparison.CurrentCultureIgnoreCase)) 
    .ToArray(); 
+0

Also ist die einzige Möglichkeit, das Array manuell zu filtern, um die Dateianzahl zu erhalten? –

+1

@TomPisz Das oder Sie gehen mit Henningbenks Lösung, um die 'GetFiles' Methode zu filtern. Da Ihr Filter einfach genug ist, würde das auch funktionieren. –

1

Sollten arbeiten, um das Muster direkt mit:

string[] MatchedFiles = Directory 
.GetFiles(this.sReportDirectory, this.sProjectNumber + "_InputCounts*", SearchOption.AllDirectories) 
.ToArray(); 
+0

Mein ursprünglicher Code war dies http://pastebin.com/Q0tPRJ6x. Das hat gut funktioniert und mir die richtige Nummer gegeben. Seitdem habe ich entdeckt, dass ich für andere Dateinamen sorgen muss, daher der Versuch, den StartWith zu verwenden. –

-1

Vielleicht sollten Sie den vollständigen Pfad in der Start Methode verwenden:

string[] MatchedFiles = Directory 
.GetFiles(this.sReportDirectory, "*", SearchOption.AllDirectories) 
.Where(s => s.StartsWith(this.sReportDirectory + "\\" + this.sProjectNumber + "_InputCounts", StringComparison.CurrentCultureIgnoreCase)) 
.ToArray(); 
+0

sReportDirectory = "J: \\ PROD \\ Projekte \\ 99999 Projekt Test \\" –

+0

Entfernen Sie das "\\" von meinem Code. – daniel

+0

"Entfernen Sie den Backslash" - oder besser "Pfad".Combine() ', das sich plattformunabhängig um diese Probleme kümmert. –