1

どの位置にも「33」が含まれるすべての PDF ファイル名を表示したいと考えています。

PDFFiles フォルダーのサンプル PDF リスト

1111.pdf
3311.pdf
2222.pdf
2331.pdf
1234.pdf
1233.pdf

このような結果を得る必要があります。これは、SQLのワイルドカード%33%のようなものです。

3311.pdf
2331.pdf
1233.pdf

私はこれを試しました

Me.ListBox1.Items.AddRange(Directory.GetFiles("C:\PDFFiles", "*33*" & ".PDF", SearchOption.AllDirectories))

それでもすべてのpdfファイルが表示されます。

1111.pdf
3311.pdf
2222.pdf
2331.pdf
1234.pdf
1233.pdf

この

Me.ListBox1.Items.AddRange(Directory.GetFiles("C:\PDFFiles", "*33" & ".PDF", SearchOption.AllDirectories))

しかし、それは得るだけです

1233.pdf //this get all filename that ends with 33

よろしくお願いします

4

4 に答える 4

2

正規表現に慣れている場合、ワイルドカードのパターン マッチング アルゴリズムはかなり奇妙です。その背後には多くの歴史があり、Windows 3、MS-DOS、CP/M (8 ビット マシン用のオペレーティング システム)、RSX (16 ビット DEC マシン用のオペレーティング システム) にまでさかのぼります。ワイルドカードの動作を含む、それらの間の大量の借用があります。いくつかの偶発的な共通点がありますが、デビッド・カトラーは最初と最後のものの主要なアーキテクトでした。

とにかく、*33*うまくいきません。独自のフィルターを適用する必要があります。Path.GetFileNameWithoutExtension() および String.Contains() を検索する*.*か、使用して一致を見つけます。*.pdf

于 2012-06-28T11:19:33.887 に答える
2

複数の を使用すると、この動作にも気付きました*

すべてのファイル名を取得し、LINQ を使用して正しい名前をフィルター処理することで解決しました。

Dim allFileNames as String() = _ 
    Directory.GetFiles("C:\PDFFiles", "*.PDF", SearchOption.AllDirectories)
Dim filtered As IEnumerable(Of String) = _ 
    .Where(Function(fileName) Path.GetFileNameWithoutExtension(fileName).Contains("33"))
于 2012-06-28T06:52:49.550 に答える
0

私たちはそれを発見しました

*___* 文字列の長さが4以上の場合、フィルター は機能します。

したがって、テスト名の値を持つすべてのレコードを取得する場合は、次のようになります。

test1234.pdf
abcdefg.pdf
123test45.pdf
12345678.pdf

私のフィルターは次のようになります:"*test" & ".PDF"それは望ましい結果を与えるでしょう

test1234.pdf
123test45.pdf

ご参考までに

于 2012-07-02T02:07:24.190 に答える
0

あなたは*の最後に行方不明です。"*33"のような の最後にもう 1 つ星を付けて"*33*"ください。

あなたの現在の表現:「* 33」&「.PDF」は、それで終わるすべてのファイル名が、取得していない33.PDF理由です。1233.pdf2331.pdf

編集: Directory.GetFileName()

のような検索パターンでは、"*1*.txt"予期しないファイル名が返される場合があります。たとえば、" 1 .txt" の検索パターンを使用すると、"longfilename.txt" が返されます。これは、同等の 8.3 ファイル名形式が "LONGFI~1.TXT" であるためです。

于 2012-06-28T06:34:15.473 に答える