Problem with win32api function + using DLL "directly" in windows

Dublanc, David ddublanc at free.fr
Fri Apr 13 16:34:11 EDT 2001


I use this script (that I found in the newsgroup) and the result is not
correct. Is it possible to use Windows DLL libraries  library in Python ?
Because there is a
GetDiskFreeSpaceEx that seems to return the good results (thanks to Chris
Gonnerman who gives me the name of this function).

David

***************************
import string,win32api,win32file

def PrintSpaceReport(drive):
    sectorsPerCluster,bytesPerSector,numFreeClusters,totalNumClusters =
win32file.GetDiskFreeSpace(drive + ":\\")
    print  sectorsPerCluster, bytesPerSector,
numFreeClusters,totalNumClusters

    sectorsPerCluster = long(sectorsPerCluster)
    bytesPerSector = long(bytesPerSector)
    numFreeClusters = long(numFreeClusters)
    totalNumClusters = long(totalNumClusters)

    print "Drive : ", drive + ":\\"
    print "Freespace : ", numFreeClusters * sectorsPerCluster *
bytesPerSector / (1024**2), "MB"
    print "Totalspace : ", totalNumClusters * sectorsPerCluster *
bytesPerSector / (1024**2), "MB"

def main():
    AvailableDrives = []
    for i in string.split(win32api.GetLogicalDriveStrings(),'\000'):

        if win32file.GetDriveType(i)==3:# We only need fixed drives (no CD
drives)
            AvailableDrives.append(i[:-2])
        DriveInfo = []


        print AvailableDrives
        for drive in AvailableDrives:
            PrintSpaceReport(drive)

if __name__ == '__main__':
    main()
*******************************************

"Mark Hammond" <MarkH at ActiveState.com> a écrit dans le message news:
3AD70CBA.8050202 at ActiveState.com...
> Dublanc, David wrote:
>
> > I have a problem with the fonction win32file.GetDiskFreeSpace
>
> >
>
> > The maximum number of space is : 65536 bytes. So if the hard disk
capacity
>
> > is > 2 Go, the function returns a wrong result.
>
> >
>
> > Do you have solution for this problem ?
>
>
> Check out the documentation in the help files - the number of bytes is
> not returned, but 4 different values are to help you calculate it:
>
> "number of sectors per cluster, the number of bytes per sector, the
> total number of free clusters on the disk and the total number of
> clusters on the disk"
>
>  >>> import win32file
>  >>> spc, bps, free_c, tot_c = win32file.GetDiskFreeSpace("F:\\")
>  >>> print 1L * free_c * spc * bps
> 2477039616
>  >>>
>
> Note the "1L" will prevent integer overflow - this little wart should be
> removed in a Python coming your way soon :)
>
> Mark.
>
>





More information about the Python-list mailing list