Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Contoh ini menunjukkan cara mengambil jumlah total byte yang digunakan oleh semua file dalam folder tertentu dan semua subfoldernya.
Contoh
Metode Sum menambahkan nilai dari semua item yang dipilih dalam klausa select. Anda dapat dengan mudah mengubah kueri ini untuk mengambil file terbesar atau terkecil di pohon direktori yang ditentukan dengan memanggil Min metode atau Max alih-alih Sum.
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
Jika Anda hanya perlu menghitung jumlah byte dalam pohon direktori tertentu, Anda dapat melakukan ini secara lebih efisien tanpa membuat kueri LINQ, yang menimbulkan overhead pembuatan kumpulan daftar sebagai sumber data. Kegunaan pendekatan LINQ meningkat saat kueri menjadi lebih kompleks, atau ketika Anda harus menjalankan beberapa kueri terhadap sumber data yang sama.
Kueri memanggil metode terpisah untuk mendapatkan panjang file. Ini dilakukan untuk menangani kemungkinan pengecualian yang akan terjadi jika file dihapus pada utas lain setelah objek FileInfo dibuat dalam panggilan ke GetFiles. Meskipun FileInfo objek telah dibuat, pengecualian dapat terjadi karena FileInfo objek akan mencoba me-refresh propertinya Length dengan panjang paling baru saat ini saat properti diakses pertama kali. Dengan menempatkan operasi ini di blok try-catch di luar kueri, kode mengikuti aturan menghindari operasi dalam kueri yang dapat menyebabkan efek samping. Secara umum, perhatian besar harus diambil ketika Anda menggunakan pengecualian untuk memastikan bahwa aplikasi tidak dibiarkan dalam keadaan tidak diketahui.
Mengkompilasi kode
Buat proyek aplikasi konsol Visual Basic, dengan pernyataan Imports untuk namespace System.Linq.