[CDiskSpace : Getting size of Disk (total+free) space :(doesn't use Shell32.dll) ] |
Environment: Win 95/98 VC6 SP4 How many of you want to know the total size of disk, and the free size of disk ?
My searches for a function (I looked for a function that did the job in prior versions to Win95 , even in the old friendly ugly DOS)
took me to the headers "dos.h" and "direct.h"
where a function named "_getdiskfree" uses a structure named
"_diskfree_t" . This function is always implemented : it's located inside the C++ libraries , and the structure is big enough for any
existing disk size .
The class provides 4 functions with default parameters , in general disk space (free/total)
is returned as float value . You must provide the float value. the index of logical drive (or its' string representation)
and requested format of answer : "mb" : the size will be as MB. "kb" will be as KB etc.
A quick look into windows takes us to two functions
GetDiskFreeSpaceEx , GetDiskFreeSpace. :These functions are located in kernel32.dll and present
a problem : they are not always implemented . (Well , today most people use
OSes better than Windows 95 OSR2 , if you want to ensure youself with less checks dont use them.
Another problem with GetDiskFreeSpace() is : that you need to do your own calculations (It is a greater function to get
the characteristics of the hard-disk then getting directly the free/tootal space.
The shell also provides a nice function : with the same name but SH as prefix
SHGetDiskFreeSpace : but this function is not always implemented in Shell32.dll.
(It is implemented only from Version 4.71 = Win98).
BOOL GetDiskSpace(float &fOut,int nIndex,LPCTSTR lpszFormat=_T("mb"));
BOOL GetDiskSpace(float &fOut,LPCTSTR lpszDisk,LPCTSTR lpszFormat=_T("mb"));
BOOL GetDiskFreeSpace(float &fOut,int nIndex,LPCTSTR lpszFormat=_T("mb"));
BOOL GetDiskFreeSpace(float &fOut,LPCTSTR lpszDisk,LPCTSTR lpszFormat=_T("mb"));
The class does additional checks : it check for availability of disk-drive , The format.
These functions are protected and are only used internally by the class.