Filtern von Dateinamen: * .abc ohne * .abcd oder * .abcde erhalten usw.

8

Directory.GetFiles (LocalFilePath, searchPattern);

MSDN-Hinweise:

  

Bei Verwendung des Sternchen-Platzhalterzeichens in einem searchPattern, z. B. " .txt", unterscheidet sich das übereinstimmende Verhalten, wenn die Erweiterung genau drei Zeichen lang ist, von dem, wenn die Erweiterung mehr oder weniger als drei Zeichen lang ist. Ein searchPattern mit einer Dateierweiterung von genau drei Zeichen gibt Dateien mit einer Erweiterung von drei oder mehr Zeichen zurück, wobei die ersten drei Zeichen mit der im searchPattern angegebenen Dateierweiterung übereinstimmen. Ein searchPattern mit einer Dateierweiterung von einem, zwei oder mehr als drei Zeichen gibt nur Dateien zurück, deren Erweiterungen genau der Länge entsprechen, die mit der im searchPattern angegebenen Dateierweiterung übereinstimmt. Bei Verwendung des Fragezeichen-Platzhalterzeichens gibt diese Methode nur Dateien zurück, die der angegebenen Dateierweiterung entsprechen. Bei zwei Dateien, "file1.txt" und "file1.txtother", gibt ein Suchmuster von "file? .txt" in einem Verzeichnis nur die erste Datei zurück, während ein Suchmuster von "file .txt "gibt beide Dateien zurück.

Die folgende Liste zeigt das Verhalten verschiedener Längen für den Parameter searchPattern:

  • *.abc gibt Dateien mit einer Erweiterung von .abc , .abcd , .abcde , .abcdef usw. zurück.

  • *.abcd gibt nur Dateien mit einer Erweiterung von .abcd zurück.

  • *.abcde gibt nur Dateien mit einer Erweiterung von .abcde zurück.

  • *.abcdef gibt nur Dateien mit einer Erweiterung von .abcdef zurück.

Wie kann ich mit dem Parameter searchPattern , der auf *.abc festgelegt ist, Dateien mit der Erweiterung .abc , nicht .abcd , .abcde usw. zurückgeben?

Vielleicht funktioniert diese Funktion:

%Vor%

Testprogramm:

%Vor%

Jemand anderes bessere Lösung?

    
Jason Ching 13.01.2009, 03:55
quelle

5 Antworten

9
___ qstnhdr ___ Filtern von Dateinamen: * .abc ohne * .abcd oder * .abcde erhalten usw. ___ qstntxt ___

Directory.GetFiles (LocalFilePath, searchPattern);

MSDN-Hinweise:

  

Bei Verwendung des Sternchen-Platzhalterzeichens in einem searchPattern, z. B. " .txt", unterscheidet sich das übereinstimmende Verhalten, wenn die Erweiterung genau drei Zeichen lang ist, von dem, wenn die Erweiterung mehr oder weniger als drei Zeichen lang ist. Ein searchPattern mit einer Dateierweiterung von genau drei Zeichen gibt Dateien mit einer Erweiterung von drei oder mehr Zeichen zurück, wobei die ersten drei Zeichen mit der im searchPattern angegebenen Dateierweiterung übereinstimmen. Ein searchPattern mit einer Dateierweiterung von einem, zwei oder mehr als drei Zeichen gibt nur Dateien zurück, deren Erweiterungen genau der Länge entsprechen, die mit der im searchPattern angegebenen Dateierweiterung übereinstimmt. Bei Verwendung des Fragezeichen-Platzhalterzeichens gibt diese Methode nur Dateien zurück, die der angegebenen Dateierweiterung entsprechen. Bei zwei Dateien, "file1.txt" und "file1.txtother", gibt ein Suchmuster von "file? .txt" in einem Verzeichnis nur die erste Datei zurück, während ein Suchmuster von "file .txt "gibt beide Dateien zurück.

Die folgende Liste zeigt das Verhalten verschiedener Längen für den Parameter searchPattern:

  • %code% gibt Dateien mit einer Erweiterung von %code% , %code% , %code% , %code% usw. zurück.

  • %code% gibt nur Dateien mit einer Erweiterung von %code% zurück.

  • %code% gibt nur Dateien mit einer Erweiterung von %code% zurück.

  • %code% gibt nur Dateien mit einer Erweiterung von %code% zurück.

Wie kann ich mit dem Parameter %code% , der auf %code% festgelegt ist, Dateien mit der Erweiterung %code% , nicht %code% , %code% usw. zurückgeben?

Vielleicht funktioniert diese Funktion:

%Vor%

Testprogramm:

%Vor%

Jemand anderes bessere Lösung?

    
___ answer438178 ___

benutze linq ....

%Vor%     
___ antwort437932 ___

Die Antwort ist, dass Sie nach dem Filtern filtern müssen. GetFiles alleine kann nicht tun. Hier ist ein Beispiel, das Ihre Ergebnisse nachbearbeiten wird. Mit diesem können Sie ein Suchmuster mit GetFiles verwenden oder nicht - es funktioniert in beide Richtungen.

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123wildcard ___ Ein Platzhalterzeichen ist ein beliebiges Zeichen, mit dem ein beliebiges anderes Zeichen oder Zeichen in einer Zeichenfolge ersetzt werden kann. ___ answer437925 ___

Kein Fehler, perverses, aber gut dokumentiertes Verhalten. * .doc entspricht * .docx basierend auf 8.3 Fallback Lookup.

Sie müssen die Ergebnisse für die Endung in doc manuell nachfiltern.

    
___ answer438645 ___

Da für "* .abc" GetFiles Erweiterungen von 3 oder mehr zurückgibt, alles mit einer Länge von 3 nach dem "." ist eine genaue Übereinstimmung, und alles andere ist nicht.

%Vor%

Nicht sicher von der Leistung der oben genannten - während es einfache Längenvergleiche statt String-Manipulationen verwendet, wird neue FileInfo () jedes Mal um die Schleife aufgerufen.

    
___ answer438509 ___

Dies wird kurzfristig nicht helfen, aber das Abstimmen auf den MS Connect-Post für dieses Problem kann Dinge in der Zukunft ändern.

Ссылка

    
___
ctacke 13.01.2009 04:08
quelle
5

Kein Fehler, perverses, aber gut dokumentiertes Verhalten. * .doc entspricht * .docx basierend auf 8.3 Fallback Lookup.

Sie müssen die Ergebnisse für die Endung in doc manuell nachfiltern.

    
Joshua 13.01.2009 04:05
quelle
0

benutze linq ....

%Vor%     
Muad'Dib 13.01.2009 07:06
quelle
0

Dies wird kurzfristig nicht helfen, aber das Abstimmen auf den MS Connect-Post für dieses Problem kann Dinge in der Zukunft ändern.

Ссылка

    
Martin Brown 13.01.2009 10:08
quelle
0

Da für "* .abc" GetFiles Erweiterungen von 3 oder mehr zurückgibt, alles mit einer Länge von 3 nach dem "." ist eine genaue Übereinstimmung, und alles andere ist nicht.

%Vor%

Nicht sicher von der Leistung der oben genannten - während es einfache Längenvergleiche statt String-Manipulationen verwendet, wird neue FileInfo () jedes Mal um die Schleife aufgerufen.

    
Kevin Haines 13.01.2009 11:12
quelle

Tags und Links