How do i determine the free disk space available?
Can anyone give me an example?
Thanks!!
------------------
Can anyone give me an example?
Thanks!!
------------------
'DiskSize.Bas -- creates disksize.txt for reading by other programs ' Patrice Terriers' excellent code ' dvDiskFree - Returns the space left on very large hard disk. ' ' This function works either with 95 OSR1 using GetDiskFreeSpace ' or 95 OSR2, 98 or NT 4.0 and NT 5.0 using GetDiskFreeSpaceEx ' #COMPILE EXE #REGISTER NONE #INCLUDE "WIN32API.INC" DECLARE FUNCTION dvDiskFree&&(BYVAL DSK$) DECLARE FUNCTION dvDiskSize&&(BYVAL DSK$) FUNCTION PBMAIN AS LONG 'ON ERROR GOTO PbMainError DIM DataBaseDir AS STRING, Answer$ DataBaseDir$ = COMMAND$ OPEN DataBaseDir$ + "DiskSize.Txt" FOR BINARY SHARED AS #1 'IF ERR THEN MSGBOX "Error in open" + STR$(ERR) 'PRINT #FileNum,FORMAT$(dvDiskSize&&(""),CHR$(44)) 'total space on local drive 'PRINT #FileNum,FORMAT$(dvDiskFree&&(""),CHR$(44)) 'space left on local drive 'PRINT #1,dvDiskSize&&("") 'total space 'IF ERRCLEAR THEN MSGBOX "error 1" + STR$(ERR) Answer = SPACE$(16) 'leave unformatted so any routine must convert on their end LSET Answer = FORMAT$(dvDiskFree&&("")) 'space left on local drive PUT #1,1,Answer$ 'IF ERRCLEAR THEN MSGBOX "error 2" 'PRINT #1,dvDiskSize&&(DataBaseDir$) 'IF ERRCLEAR THEN MSGBOX "error 3" 'PRINT #1,dvDiskFree&&(DataBaseDir$) 'IF ERRCLEAR THEN MSGBOX "error 4" FLUSH #1 CLOSE #1 MSGBOX answer 'IF ERRCLEAR THEN MSGBOX "error 5" PbMainExit: EXIT FUNCTION PbMainError: MSGBOX "Error in PbMain (Disksize program) error #" & STR$(ERR) SLEEP 3000 RESUME PbMainExit END FUNCTION FUNCTION dvDiskFree&&(BYVAL DSK$) 'Add EXPORT if DLL DIM Drive AS INTEGER DIM Done AS LONG DIM hLib AS LONG DIM pGetDiskFreeSpaceEx AS DWORD PTR ' Returns the number of free bytes on selected drive LOCAL d AS ASCIIZ * 4 LOCAL sc AS DWORD LOCAL bs AS DWORD LOCAL fc AS DWORD LOCAL tc AS DWORD Drive% = ASC(UCASE$(Dsk$)) IF Drive% < 65 OR Drive% > 90 THEN Drive% = 0 IF Drive% THEN d = CHR$(Drive%) + ":\" ELSE d = CURDIR$ END IF Done& = 0 hLib& = LoadLibrary("KERNEL32.DLL") IF hLib& THEN pGetDiskFreeSpaceEx = GetProcAddress(hLib&, "GetDiskFreeSpaceExA") IF pGetDiskFreeSpaceEx THEN 'changed CDECL to SDECL CALL DWORD pGetDiskFreeSpaceEx SDECL (d, lpFreeBytesAvailableToCaller&&, lpTotalNumberOfBytes&&, lpTotalNumberOfFreeBytes&&) FUNCTION = lpFreeBytesAvailableToCaller&& Done& = -1 END IF CALL FreeLibrary(hLib&) END IF IF NOT Done& THEN IF ISTRUE(GetDiskFreeSpace(d, sc, bs, fc, tc)) THEN FUNCTION = CQUD(sc * bs * fc) END IF END IF END FUNCTION '--------------------------------------------------------------------------- ' dvDiskSize - Returns the size of very large hard disk. ' ' This function works either with 95 OSR1 using GetDiskFreeSpace ' or 95 OSR2, 98 or NT 4.0 and NT 5.0 using GetDiskFreeSpaceEx ' FUNCTION dvDiskSize&&(BYVAL DSK$) 'Add EXPORT if DLL ' This function works either with 95 OSR1 using GetDiskFreeSpace ' or 95 OSR2, 98 or NT 4.0 and NT 5.0 using GetDiskFreeSpaceEx DIM pGetDiskFreeSpaceEx AS DWORD PTR ' Returns the number of total bytes on selected drive LOCAL d AS ASCIIZ * 4 LOCAL sc AS DWORD LOCAL bs AS DWORD LOCAL fc AS DWORD LOCAL tc AS DWORD Drive% = ASC(UCASE$(Dsk$)) IF Drive% < 65 OR Drive% > 90 THEN Drive% = 0 IF Drive% THEN d = CHR$(Drive%) + ":\" ELSE d = CURDIR$ END IF Done& = 0 hLib& = LoadLibrary("KERNEL32.DLL") IF hLib& THEN pGetDiskFreeSpaceEx = GetProcAddress(hLib&, "GetDiskFreeSpaceExA") IF pGetDiskFreeSpaceEx THEN 'changed CDECL to SDECL CALL DWORD pGetDiskFreeSpaceEx SDECL (d, lpFreeBytesAvailableToCaller&&, lpTotalNumberOfBytes&&, lpTotalNumberOfFreeBytes&&) FUNCTION = lpTotalNumberOfBytes&& Done& = -1 END IF CALL FreeLibrary(hLib&) END IF IF NOT Done& THEN IF ISTRUE(GetDiskFreeSpace(d, sc, bs, fc, tc)) THEN FUNCTION = CQUD(sc * bs * tc) END IF END IF END FUNCTION
#DIM ALL 'DiskFree2 to overcome earlier Windows 95 not having GetDiskFreeSpaceExA 'This is from CALL DWORD example in the docs #INCLUDE "WIN32API.INC" DECLARE FUNCTION MyDiskFreeSpaceEx _ (lpPath AS ASCIIZ, lpFreeToCaller AS QUAD, lpTotalBytes AS QUAD, lpTotalFreeBytes AS QUAD) AS LONG FUNCTION PBMAIN AS LONG DIM result AS LONG, MyDrive AS STRING, MyDiskSize AS QUAD, MyDiskFree AS QUAD MyDrive = "C:\" MyDiskSize = DISKFREE(MyDrive) MSGBOX "Using Windows 98SE only get " & FORMAT$(MyDiskSize,"#,") '2,147,155,968 CALL Disksize2(MyDrive,MyDiskSize,MyDiskFree) IF MyDiskSize > -1 THEN MSGBOX "MyDiskSize: " + FORMAT$(MyDiskSize,"#,") & $CRLF & _ "MyDiskFree: " & FORMAT$(MyDiskFree,"#,") & $CRLF & _ "Used space: " & FORMAT$(MyDiskSize-MyDiskFree,"#,") ELSE MSGBOX "Earlier version of Windows 95 can't use GetDiskFreeSpaceExA" END IF END FUNCTION SUB DiskSize2(Drive AS STRING,SizeOfDisk AS QUAD,TotalFree AS QUAD) DIM hLib AS DWORD DIM pAddr AS DWORD DIM szDrv AS ASCIIZ * %MAX_PATH DIM lResult AS LONG szDrv = Drive DIM FreeToUserQuota AS QUAD hLib = LoadLibrary("KERNEL32.DLL") pAddr = GetProcAddress(hLib, "GetDiskFreeSpaceExA") IF pAddr <> 0 THEN CALL DWORD pAddr USING MyDiskFreeSpaceEx(szDrv, FreeToUserQuota&&, SizeOfDisk&&, TotalFree&&) TO lResult ELSE SizeOfDisk = -1 TotalFree = -1 END IF FreeLibrary hLib END SUB
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Comment