Here's the FileSize() method in my XP library, which of course handles files >2gig. (As do all the drive size methods, obviously.) I'm not going to bother adding in hungarian notation, which I do not use in the XP library to make the interface more intuitive.
vb Code:
  1. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  2. Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
  3. Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
  4.  
  5. ' Currency handles file sizes over 2 gig
  6. ' Thanks to Richard Newcombe from codeguru.com
  7. Public Function GetSize(ByVal File As String) As Currency
  8.     Const GENERIC_READ = &H80000000
  9.     Const FILE_SHARE_READ = &H1
  10.     Const FILE_SHARE_WRITE = &H2
  11.     Const OPEN_EXISTING = 3
  12.     Dim lngHandle As Long
  13.     Dim lngLow As Long
  14.     Dim lngHigh As Long
  15.     Dim curFileSize As Currency
  16.    
  17.     ' Open the file
  18.     lngHandle = CreateFile(File, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0, 0)
  19.     ' Get the file size
  20.     lngLow = GetFileSize(lngHandle, lngHigh)
  21.     CloseHandle lngHandle
  22.     ' Combine the Low and High values into one currency
  23.     ' Must use the '@' currency declaration or IDE will balk
  24.     curFileSize = 4294967295@ * lngHigh
  25.     If lngLow < 0 Then
  26.         curFileSize = curFileSize + (4294967295@ + (lngLow + 1))
  27.     Else
  28.         curFileSize = curFileSize + lngLow
  29.     End If
  30.     GetSize = curFileSize
  31. End Function
This is about as fast and easy as it gets.