Útmutató: A mappák halmazában (LINQ) lévő bájtok teljes számának lekérdezése (Visual Basic)
Ez a példa bemutatja, hogyan kérhető le a megadott mappában lévő összes fájl és annak almappái által használt bájtok teljes száma.
Példa
A Sum metódus hozzáadja a záradékban select
kijelölt összes elem értékét. Ezt a lekérdezést egyszerűen módosíthatja úgy, hogy a megadott könyvtárfa legnagyobb vagy legkisebb fájlját kérje le ahelyett, hogy a metódust vagy Max a Min metódust Sumhívja meg.
Module QueryTotalBytes
Sub Main()
' Change the drive\path if necessary.
Dim root As String = "C:\Program Files\Microsoft Visual Studio 9.0\VB"
'Take a snapshot of the folder contents.
' This method assumes that the application has discovery permissions
' for all folders under the specified path.
Dim fileList = My.Computer.FileSystem.GetFiles _
(root, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
Dim fileQuery = From file In fileList _
Select GetFileLength(file)
' Force execution and cache the results to avoid multiple trips to the file system.
Dim fileLengths = fileQuery.ToArray()
' Find the largest file
Dim maxSize = Aggregate aFile In fileLengths Into Max()
' Find the total number of bytes
Dim totalBytes = Aggregate aFile In fileLengths Into Sum()
Console.WriteLine("The largest file is " & maxSize & " bytes")
Console.WriteLine("There are " & totalBytes & " total bytes in " & _
fileList.Count & " files under " & root)
' Keep the console window open in debug mode
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
End Sub
' This method is used to catch the possible exception
' that can be raised when accessing the FileInfo.Length property.
Function GetFileLength(ByVal filename As String) As Long
Dim retval As Long
Try
Dim fi As New System.IO.FileInfo(filename)
retval = fi.Length
Catch ex As System.IO.FileNotFoundException
' If a file is no longer present,
' just return zero bytes.
retval = 0
End Try
Return retval
End Function
End Module
Ha csak egy adott könyvtárfában kell megszámolnia a bájtok számát, akkor ezt hatékonyabban teheti meg LINQ-lekérdezés létrehozása nélkül, ami a listagyűjtemény adatforrásként való létrehozásának többletterhelésével jár. A LINQ-módszer hasznossága nő, mivel a lekérdezés összetettebbé válik, vagy ha több lekérdezést kell futtatnia ugyanazon az adatforráson.
A lekérdezés egy külön metódust hív meg a fájlhossz lekéréséhez. Ezt azért teszi, hogy felhasználja a lehetséges kivételt, amely akkor merül fel, ha a fájlt egy másik szálon törölték, miután az FileInfo objektum létrejött a hívásban GetFiles
. Annak ellenére, hogy az FileInfo objektum már létrejött, a kivétel azért fordulhat elő, mert egy FileInfo objektum a tulajdonság első elérésekor a legújabb hosszon próbálja frissíteni Length a tulajdonságát. Ha ezt a műveletet a lekérdezésen kívül egy próbafogási blokkba helyezi, a kód a mellékhatásokat okozó lekérdezések műveleteinek elkerülésére vonatkozó szabályt követi. Általában nagy figyelmet kell fordítva arra, hogy kivételeket használjon annak érdekében, hogy az alkalmazás ne maradjon ismeretlen állapotban.
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
.