Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a példa öt, bájtban megadott fájlmérettel kapcsolatos lekérdezést mutat be:
Hogyan lehet lekérni a legnagyobb fájl méretét bájtban.
Hogyan lehet lekérni a legkisebb fájl méretét bájtban.
Egy megadott gyökérmappán belül egy vagy több mappából a FileInfo objektumhoz tartozó legnagyobb vagy legkisebb fájl lekérése.
Hogyan lehet lekérni egy sorozatot, például a 10 legnagyobb fájlt.
Fájlok csoportokba rendelése a fájlméretük alapján bájtban, figyelmen kívül hagyva a megadott méretnél kisebb fájlokat.
példa
Az alábbi példa öt külön lekérdezést tartalmaz, amelyek bemutatják a fájlok lekérdezését és csoportosítását a bájtokban lévő fájlméretüktől függően. Ezeket a példákat egyszerűen módosíthatja úgy, hogy a lekérdezést az FileInfo objektum más tulajdonságára alapozza.
Module QueryBySize
Sub Main()
' Change the drive\path if necessary
Dim root As String = "C:\Program Files\Microsoft Visual Studio 9.0"
'Take a snapshot of the folder contents
Dim dir As New System.IO.DirectoryInfo(root)
Dim fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories)
' Return the size of the largest file
Dim maxSize = Aggregate aFile In fileList Into Max(GetFileLength(aFile))
'Dim maxSize = fileLengths.Max
Console.WriteLine("The length of the largest file under {0} is {1}", _
root, maxSize)
' Return the FileInfo object of the largest file
' by sorting and selecting from the beginning of the list
Dim filesByLengDesc = From file In fileList _
Let filelength = GetFileLength(file) _
Where filelength > 0 _
Order By filelength Descending _
Select file
Dim longestFile = filesByLengDesc.First
Console.WriteLine("The largest file under {0} is {1} with a length of {2} bytes", _
root, longestFile.FullName, longestFile.Length)
Dim smallestFile = filesByLengDesc.Last
Console.WriteLine("The smallest file under {0} is {1} with a length of {2} bytes", _
root, smallestFile.FullName, smallestFile.Length)
' Return the FileInfos for the 10 largest files
' Based on a previous query, but nothing is executed
' until the For Each statement below.
Dim tenLargest = From file In filesByLengDesc Take 10
Console.WriteLine("The 10 largest files under {0} are:", root)
For Each fi As System.IO.FileInfo In tenLargest
Console.WriteLine("{0}: {1} bytes", fi.FullName, fi.Length)
Next
' Group files according to their size,
' leaving out the ones under 200K
Dim sizeGroups = From file As System.IO.FileInfo In fileList _
Where file.Length > 0 _
Let groupLength = file.Length / 100000 _
Group file By groupLength Into fileGroup = Group _
Where groupLength >= 2 _
Order By groupLength Descending
For Each group In sizeGroups
Console.WriteLine(group.groupLength + "00000")
For Each item As System.IO.FileInfo In group.fileGroup
Console.WriteLine(" {0}: {1}", item.Name, item.Length)
Next
Next
' 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.
' In this particular case, it is safe to ignore the exception.
Function GetFileLength(ByVal fi As System.IO.FileInfo) As Long
Dim retval As Long
Try
retval = fi.Length
Catch ex As FileNotFoundException
' If a file is no longer present,
' just return zero bytes.
retval = 0
End Try
Return retval
End Function
End Module
Egy vagy több teljes FileInfo objektum visszaadásához a lekérdezésnek először meg kell vizsgálnia mindegyiket az adatforrásban, majd rendeznie kell őket a Hossz tulajdonság értéke alapján. Ezután visszaadhatja az egyetlent vagy a legnagyobb hosszúságú sorozatot. A lista első elemének visszaadására használható First . Az elemek első n számának visszaadására használható Take . Adjon meg csökkenő rendezési sorrendet, hogy a legkisebb elemeket a lista elejére helyezze.
A lekérdezés egy külön metódust hív fel a fájlméret bájtban való lekéréséhez, hogy felhasználja a lehetséges kivételt, amely akkor merül fel, ha egy fájlt töröltek egy másik szálon a FileInfo hívás GetFilessorán létrehozott objektum óta eltelt időszakban. A kivétel előfordulhat még akkor is, ha az FileInfo objektum már létre lett hozva, mert az FileInfo objektum az első hozzáféréskor megpróbálja a Length tulajdonságát frissíteni a legfrissebb méretet használva bájtban. Ha ezt a műveletet a lekérdezésen kívül egy kipróbálási blokkba helyezi, követjük azt a szabályt, hogy elkerüljük a mellékhatásokat okozó lekérdezések műveleteit. Általánosságban elmondható, hogy a kivételek használatakor nagy figyelmet kell fektetni arra, hogy az alkalmazás ne maradjon ismeretlen állapotban.
A kód összeállítása
Hozzon létre egy Visual Basic konzolalkalmazás-projektet a System.Linq névtér utasításával Imports .