我已經研究了幾個小時,但我找不到解決方案。可能很容易,所以這是一個全面的問題。
我有一個串列(字串),其中包含數百個目錄字串,如下所示:
"c:\temp\in",
"c:\temp\in - Kopie",
"c:\temp\in - Kopie\1",
"c:\temp\in - Kopie\1\yyy",
"c:\temp\in - Kopie\1\yyy\yyyyy",
"c:\temp\in - Kopie\2",
"c:\temp\in2",
"c:\temp\ipadb",
"c:\temp\out",
"c:\temp\out2",
"c:\temp\Processes2",
"c:\temp\Processes2\Kassenbelege",
"c:\temp\Processes2\Kassenbelege\images",
"c:\temp\Processes2\Posteingang",
"c:\temp\Processes2\Posteingang\images",
"c:\temp\Processes2\Rechnungen",
"c:\temp\Processes2\Rechnungen\images",
"c:\temp\Processes2\Rechnungen\images\backup",
"c:\temp\test"
我有一個要從這個串列中填寫的課程。
Public Class _Folder
Public Property Name As String
Public ReadOnly Property SubFolders As List(Of _Folder) = New List(Of _Folder)()
End Class
任何幫助表示贊賞。謝謝你。
uj5u.com熱心網友回復:
這段代碼應該能讓你到達那里。
Dim Folders As New List(Of String)({"c:\temp\in",
"c:\temp\in - Kopie",
"c:\temp\in - Kopie\1",
"c:\temp\in - Kopie\1\yyy",
"c:\temp\in - Kopie\1\yyy\yyyyy",
"c:\temp\in - Kopie\2",
"c:\temp\in2",
"c:\temp\ipadb",
"c:\temp\out",
"c:\temp\out2",
"c:\temp\Processes2",
"c:\temp\Processes2\Kassenbelege",
"c:\temp\Processes2\Kassenbelege\images",
"c:\temp\Processes2\Posteingang",
"c:\temp\Processes2\Posteingang\images",
"c:\temp\Processes2\Rechnungen",
"c:\temp\Processes2\Rechnungen\images",
"c:\temp\Processes2\Rechnungen\images\backup",
"c:\temp\test"})
Dim RootFolder As New _Folder
For Each f In Folders
Dim drive = f.Split(":")(0)
Dim path = f.Split(":")(1)
Dim pathSplit() As String = path.Split(System.IO.Path.DirectorySeparatorChar, StringSplitOptions.RemoveEmptyEntries)
Dim currentFolder As _Folder = RootFolder
For Each level In pathSplit
Dim foundFolder = (From x In currentFolder.SubFolders Where x.Name = level Select x).FirstOrDefault
If foundFolder Is Nothing Then
foundFolder = New _Folder
foundFolder.Name = level
currentFolder.SubFolders.Add(foundFolder)
End If
currentFolder = foundFolder
Next
Next
uj5u.com熱心網友回復:
感謝您的幫助。這是最終的解決方案。我添加了一些代碼以使其也可用于網路共享,并在類中添加了檔案夾路徑以在瀏覽樹視圖時訪問此資訊。
Private Sub lblFilter_TextChanged(sender As Object, e As TextChangedEventArgs) 處理 lblFilter.TextChanged
Dim lstFolders As New List(Of _Folder)
Dim RootFolder As New _Folder
For Each f In _items
If f.Contains("\\") Then f = f.Replace("\\", ":")
Dim drive = f.Split(":")(0)
Dim path = f.Split(":")(1)
'If String.IsNullOrEmpty(drive) Then Continue For
RootFolder.Name = drive
Dim charSeparators As Char() = New Char() {System.IO.Path.DirectorySeparatorChar}
Dim pathSplit() As String = path.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
Dim currentFolder As _Folder = RootFolder
For Each level In pathSplit
If String.IsNullOrEmpty(level) Then Continue For
Dim foundFolder = (From x In currentFolder.SubFolders Where x.Name = level Select x).FirstOrDefault
If foundFolder Is Nothing Then
foundFolder = New _Folder
foundFolder.Name = level
If f.StartsWith(":") Then 'Netzwerkpfad
foundFolder.FullPath = (f.Substring(0, f.IndexOf(level)) & level).Replace(":", "\\")
Else 'Pfad mit Laufwerksbuchstaben
foundFolder.FullPath = f.Substring(0, f.IndexOf(level)) & level
End If
currentFolder.SubFolders.Add(foundFolder)
End If
currentFolder = foundFolder
Next
Next
lstFolders.Add(RootFolder)
tvw.DataContext = lstFolders
End Sub
本班已滿:
Public Class _Folder
Public Property Name As String
Public Property FullPath As String
Public ReadOnly Property SubFolders As List(Of _Folder) = New List(Of _Folder)()
End Class
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496424.html
標籤:VB.net
