0

フォルダー内のすべてのファイルをループして、ファイル名に特定のテキストを含むファイルのみを一覧表示しようとしています。たとえばTEST.pdf、フォルダー X に新しいファイルを移動するときにTest.pdf、そのフォルダーに名前が付けられたファイルが既に存在する場合は、新しいファイルの名前を変更する必要がありますTest1.pdf。最初にそれを行うために、名前にその単語を含む既存のすべてのファイルの数を見つけようとしていTESTます。

これは私がこれまでに持っているコードです:

For Each FoundFile As String In My.Computer.FileSystem.GetFiles(varFolderPath, FileIO.SearchOption.SearchTopLevelOnly, varFileName & "*")
    If FoundFile.Contains(varFileName) Then                                                                             
        Response.Write(FoundFile & "</br>")
    End If
Next

varFileName渡される変数の値は ですTEST.pdf

現在、フォルダーTest.pdfTest1.pdfTest2.pdfがありますが、何らかの理由で、このコードは 3 つのファイルすべてを一覧表示するのではなくTest.pdf、応答に表示されるだけです。

For Eachループを次のように変更すると:

For Each fileName As String In Directory.GetFiles(varFolderPath, varFileName & "*")

それでも、同じ結果のみが得られTEST.pdfます。なんで?

4

1 に答える 1

2

現在、フォルダーに Test.pdf、Test1.pdf、および Test2.pdf がありますが、何らかの理由で、このコードは、3 つのファイルすべてをリストする代わりに、response.write に Test.pdf ファイルを表示するだけです。

それは簡単です。大文字と小文字を区別せずに表示しても、「Test1.pdf」という名前には「TEST.pdf」は含まれません。

おそらく、拡張子と非拡張子部分を別々に一致させる必要があります-拡張子が一致、ファイル名の最初の部分が検索ファイル名の最初の部分で始まるかどうかを確認します。次のようなものです:

Dim extension = Path.GetExtension(varFileName)
Dim rest = Path.GetFileNameWithoutExtension(varFileName)
If Path.GetExtension(FoundFile) = extension AndAlso _
   Path.GetFileNameWithoutExtension(FoundFile).StartsWith(rest) Then
    Response.Write(FoundFile & "</br>")
End If
于 2013-04-08T21:28:19.370 に答える