System.IO.Directory.GetFiles
-
private const string C_PATTERN = "BLA_????.ZIP"; string[] Files = System.IO.Directory.GetFiles(Path, C_PATTERN);
Kann ich das Ersatzzeichen "?" so nicht benutzen?
In meinem Programm wirkt sich "BLA_????.ZIP" so aus, wie "BLA_*.ZIP".
-
Kann es sein, dass BLA_????.ZIP alle Dateinamen im 8.3-Format matcht?
-
Hallo,
Da diese Methode Dateinamen mit dem Dateinamenformat 8.3 und dem langen Dateinamenformat überprüft, werden beim Suchmuster "*1*.txt" möglicherweise unerwartete Dateinamen zurückgegeben. Beim Suchmuster "*1*.txt" wird z. B. "longfilename.txt" zurückgegeben, da das entsprechende 8.3-Dateinamenformat "LONGFI~1.TXT" lautet.
MfG,
Probe-Nutzer
-
Das 8.3 Format hatte ich nicht im Sinn...
Was mich bewegt ist, dass die Win-API FindFirstFile() an der Stelle des
Fragezeichens "?" ein beliebiges Zeichen mit der Länge von einem Byte
einsetzt und für das Mult "*****" eben beliebig viele Zeichen.Die Suche mit "bla_????.zip" filtert alle Dateien, die maximal 8 Zeichen
(ohne Extension) lang sein müssten. Die genannte C# Funktion liefert jedoch
das Ergebnis, was unter der Win-API FindFirstFile() mit "bla_*.zip" erzielt wird.Beispiel:
Suche "bla_????.zip" mit Win-API FindFirstFile():
- bla_0001.zip
- bla_0002.zip
- ...
- bla_0010.zipSuche "bla_????.zip" mit der genannten C# Funktion:
- bla_0001.zip
- bla_0002.zip
- ...
- bla_0010.zip
- bla_0010 (Kopie).zip ???!!!Gibt es eventuell das "?" mit der o.g. C# Funktion nicht
oder muss ich eine andere Syntax nehmen?Übrigens: Ich benutzt VS 2005 Prof. .NET2.
(Vielleicht gibt es ein Unterschied zu anderen Versionen?)
-
Einfach nochmal den Beitrag 2 über mir lesen und verstehen.
Tipp: Aus "bla_0010 (Kopie).zip" wird im 8.3 Format sowas wie "bla_00~1.zip" und das matcht wunderbar mit dem Pattern "bla_????.zi".
-
Das Resultat der ganzen Sache ist dann also offenbar,
dass man bei Portierungen aus anderen Sprachen,
doch sehr aufpassen muss. Das ist ja typisch MS.