Útmutató: Fájlok csoportosítása bővítmény szerint (LINQ) (Visual Basic)
Ez a példa bemutatja, hogyan használható a LINQ speciális csoportosítási és rendezési műveletek végrehajtására fájlok vagy mappák listáján. Azt is bemutatja, hogyan jelenítheti meg a kimenetet a konzolablakban a metódusok és Take a Skip metódusok használatával.
Példa
Az alábbi lekérdezés bemutatja, hogyan csoportosíthatja egy adott könyvtárfa tartalmát a fájlnévkiterjesztés alapján.
Module GroupByExtension
Public Sub Main()
' Root folder to query, along with all subfolders.
Dim startFolder As String = "C:\program files\Microsoft Visual Studio 9.0\VB\"
' Used in WriteLine() to skip over startfolder in output lines.
Dim rootLength As Integer = startFolder.Length
'Take a snapshot of the folder contents
Dim dir As New System.IO.DirectoryInfo(startFolder)
Dim fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories)
' Create the query.
Dim queryGroupByExt = From file In fileList _
Group By file.Extension.ToLower() Into fileGroup = Group _
Order By ToLower _
Select fileGroup
' Execute the query. By storing the result we can
' page the display with good performance.
Dim groupByExtList = queryGroupByExt.ToList()
' Display one group at a time. If the number of
' entries is greater than the number of lines
' in the console window, then page the output.
Dim trimLength = startFolder.Length
PageOutput(groupByExtList, trimLength)
End Sub
' Pages console display for large query results. No more than one group per page.
' This sub specifically works with group queries of FileInfo objects
' but can be modified for any type.
Sub PageOutput(ByVal groupQuery, ByVal charsToSkip)
' "3" = 1 line for extension key + 1 for "Press any key" + 1 for input cursor.
Dim numLines As Integer = Console.WindowHeight - 3
' Flag to indicate whether there are more results to display
Dim goAgain As Boolean = True
For Each fg As IEnumerable(Of System.IO.FileInfo) In groupQuery
' Start a new extension at the top of a page.
Dim currentLine As Integer = 0
Do While (currentLine < fg.Count())
Console.Clear()
Console.WriteLine(fg(0).Extension)
' Get the next page of results
' No more than one filename per page
Dim resultPage = From file In fg _
Skip currentLine Take numLines
' Execute the query. Trim the display output.
For Each line In resultPage
Console.WriteLine(vbTab & line.FullName.Substring(charsToSkip))
Next
' Advance the current position
currentLine = numLines + currentLine
' Give the user a chance to break out of the loop
Console.WriteLine("Press any key for next page or the 'End' key to exit.")
Dim key As ConsoleKey = Console.ReadKey().Key
If key = ConsoleKey.End Then
goAgain = False
Exit For
End If
Loop
Next
End Sub
End Module
A program kimenete a helyi fájlrendszer részleteitől és a startFolder
beállított értéktől függően hosszú lehet. Az összes találat megtekintésének engedélyezéséhez ez a példa bemutatja, hogyan jelenítheti meg az eredményeket. Ugyanezek a technikák alkalmazhatók Windows és webalkalmazásokra is. Figyelje meg, hogy mivel a kód egy csoport elemeit lapozza, beágyazott For Each
hurokra van szükség. Van még néhány további logika, amely kiszámítja a lista aktuális pozícióját, és lehetővé teszi a felhasználó számára a lapozás leállítását és a programból való kilépést. Ebben az esetben a lapozó lekérdezés az eredeti lekérdezés gyorsítótárazott eredményein fut. Más környezetekben, például linq-ről SQL-re, ilyen gyorsítótárazásra nincs szükség.
A kód fordítása
Hozzon létre egy Visual Basic konzolalkalmazás-projektet a System.Linq névtér utasításával Imports
.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: