Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu örnekte, belirtilen bir klasördeki tüm dosyalar ve tüm alt klasörleri tarafından kullanılan toplam bayt sayısının nasıl alındığı gösterilmektedir.
Örnek
yöntemi, Sum yan tümcesinde select seçilen tüm öğelerin değerlerini ekler. Bu sorguyu, yerine Minveya Max yöntemini çağırarak Sum belirtilen dizin ağacındaki en büyük veya en küçük dosyayı alacak şekilde kolayca değiştirebilirsiniz.
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
Yalnızca belirtilen dizin ağacındaki bayt sayısını saymak zorundaysanız, bunu bir LINQ sorgusu oluşturmadan daha verimli bir şekilde yapabilirsiniz ve bu da liste koleksiyonunu veri kaynağı olarak oluşturma yükünü doğurur. Sorgu daha karmaşık hale geldikçe veya aynı veri kaynağında birden çok sorgu çalıştırmanız gerektiğinde LINQ yaklaşımının kullanışlılığı artar.
Sorgu, dosya uzunluğunu elde etmek için ayrı bir yönteme çağrır. Başka bir iş parçacığında nesne çağrısında FileInfo oluşturulduktan sonra dosya silinirse ortaya çıkacak olası bir özel durumu yakalamak için GetFiles bunu yapar. Nesne FileInfo zaten oluşturulmuş olmasına rağmen, hata oluşabilir çünkü bir FileInfo nesnesi, Length özelliğine ilk kez erişildiğinde özelliğini en güncel uzunlukla yenilemeye çalıştığında. Kod, bu işlemi sorgunun dışındaki bir try-catch bloğuna yerleştirerek, yan etkilere neden olabilecek sorgulardaki işlemlerden kaçınma kuralını izler. Genel olarak, bir uygulamanın bilinmeyen bir durumda bırakılmadığından emin olmak için istisnaları işlerken büyük özen gösterilmelidir.
Kodu derleme
System.Linq ad alanı bildirimi içeren bir Imports Visual Basic konsol uygulaması projesi oluşturun.