Display filesizes >2GB

Share your advanced PureBasic knowledge/code with the community.
Justin
Addict
Addict
Posts: 948
Joined: Sat Apr 26, 2003 2:49 pm

Display filesizes >2GB

Post by Justin »

Code updated For 5.20+

Just a workaround to display filesizes >2gb as strings due to the lack of doubles

Code: Select all

#INVALID_FILE_SIZE = $FFFFFFFF

Structure DOUBLE_
  l1.l
  l2.l
EndStructure

Procedure GetFileSize64(file$, *fs.DOUBLE_)
  hfile.l = CreateFile_(file$, #GENERIC_READ, 0, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, #Null)
  
  If hfile<>#INVALID_HANDLE_VALUE
    *fs\l1 = GetFileSize_(hfile, @*fs\l2)
    CloseHandle_(hfile)
    ProcedureReturn *fs\l1
  Else
    ProcedureReturn #INVALID_FILE_SIZE
  EndIf
EndProcedure

Procedure.s GetFileSize64Str(file$)
  If GetFileSize64(file$, @fs.DOUBLE_)<>#INVALID_FILE_SIZE
    sz$ = Space(100)
    If StrFormatByteSize64_(fs\l1, fs\l2, @sz$, 100)
      ProcedureReturn sz$
    Else
      ProcedureReturn ""
    EndIf
  Else
    ProcedureReturn ""
  EndIf
EndProcedure

file$ = OpenFileRequester("", "", "", 0)
If file$
  Debug GetFileSize64Str(file$)
EndIf