我想在特定檔案夾中搜索不包含給定模式的 png 檔案,并將它們添加到串列框中。所以我想找到名稱中沒有 _norm 或 _spec 的 png。模式可以是大寫或小寫。
檔案夾中的檔案:
- 一個.png
- a_norm.png
- a_spec.png
- a_Spec.png
- a_Norm.png
希望的結果在串列框中:
一個.png
uj5u.com熱心網友回復:
由于GetFiles沒有排除檔案的選項,只有包含檔案的模式,因此必須首先獲取所有符合該模式的檔案,然后排除不需要的檔案。
以下方法排除包含所提供字串之一的檔案exclusions并忽略大小寫:
Function ExcludeFiles(files As String(), exclusions As String()) As String()
Return files.Where(Function(s) Not exclusions.
Any(Function(e) s.IndexOf(e, StringComparison.CurrentCultureIgnoreCase) > 0)).
ToArray()
End Function
用法:
Sub DoSomething()
Dim path As String = "C:\WhatEver"
Dim allPngFiles As String() = System.IO.Directory.GetFiles(path, "*.png")
Dim filtered As String() = ExcludeFiles(allPngFiles, {"_norm", "_spec"})
'Do something with the filtered files...
End Sub
uj5u.com熱心網友回復:
您不能使用GetFiles,它只能根據匹配掩碼進行過濾,而不是不匹配。您需要獲取所有檔案,然后通過適當的String比較丟棄不需要的檔案。這可能看起來像這樣:
Dim folderPath = "folder path here"
Dim filePaths = Directory.GetFiles("*.png").
Where(Function(filePath)
Dim fileName = Path.GetFileNameWithoutExtension(filePath)
Return Not fileName.EndsWith("_norm", StringComparison.InvariantCultureIgnoreCase) AndAlso
Not fileName.EndsWith("_spec", StringComparison.InvariantCultureIgnoreCase)
End Function).
ToArray()
這假設這些是您正在談論的后綴。如果它們可以在名稱中的任何位置,那么您可以相應地進行調整。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/409726.html
標籤:
