Newsgroup: it.comp.lang.visual-basic
Titolo: Spazio disco

Questo in un modulo
Declare Function apiDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA"
(ByVal lpRootPathName As String, lpSectorsPerCluster As Long,
lpBytesPerSector As Long, lpNumberOfFreeClusters As Long,
lpTtoalNumberOfClusters As Long) As Long
Questo il codice sulla Form
Private Sub Form_Load()
  Dim TotalClusters As Long
  Dim FreeClusters As Long
  Dim SectorsPerCluster As Long
  Dim BytesPerSector As Long
  Dim Temp3 As Currency
  Dim Temp4 As Currency
   If apiDiskFreeSpace( "C:\", SectorsPerCluster&, BytesPerSector&,
FreeClusters&, TotalClusters&) Then
    Temp3@ = CCur(SectorsPerCluster) * CCur(BytesPerSector) *
CCur(TotalClusters)
    Temp4@ = CCur(SectorsPerCluster) * CCur(BytesPerSector) *
CCur(FreeClusters)
    Debug.Print Temp3@, Temp4@
   End If
End Sub
Quanto sopra mi serve per ricavare lo spazio totale e quello rimasto
dell' HD. Tutto funziona a meraviglia se l' HD e' di 2Gb. Per HD con piu' di
2Gb ottengo sempre e comunque il valore massimo di 2Gb.
Sbaglio io qualcosa? Sono a conoscenza del limite dei 2Gb di Win95.
Win98 ha lo stesso problema? Perch' il pc sul quale ho potuto
provare il programmino dotato di HD da 4,5Gb aveva Win98.
Io compilo in Win95.
Grazie
Mauro

Tratto da Windows SDK:
The GetDiskFreeSpace function returns incorrect values for volumes that are
larger than 2 gigabytes. The function caps the values stored into
*lpNumberOfFreeClusters and *lpTotalNumberOfClusters so as to never report
volume sizes that are greater than 2 gigabytes.
Even on volumes that are smaller than 2 gigabytes, the values stored into
*lpSectorsPerCluster, *lpNumberOfFreeClusters, and *lpTotalNumberOfClusters
values may be incorrect. That is because the operating system manipulates
the
values so that computations with them yield the correct volume size.
Windows 95 OSR 2: The GetDiskFreeSpaceEx function is available on Windows 95
systems beginning with OEM Service Release 2 (OSR 2). The GetDiskFreeSpaceEx
function returns correct values for all volumes, including those that are
greater than 2 gigabytes.
Ciao
Corrado

Sbaglio io qualcosa? Sono a conoscenza del limite dei 2Gb di Win95.
  Il problema esiste fino alla versione OSR2, dopodiche' per
partizioni di oltre 2 GByte devi utilizzare la GetDiskFreeSpaceEx
(nota l'"Ex" finale) che credo funzioni allo stesso modo ma non
giurerei perche' non l'ho mai utilizzata.
  Naturalmente, tutto cio' comporta il rischio di avere errori se
utilizza la nuova API su sistemi vecchi...
  Ciao :-)
  Massimo
  Nell'indirizzo, inserire una "h" tra la "t" e la "u"
  In the address, insert an "h" between the "t" and the "u"

...

--------------------------------------
Per evitare problemi dovuti all'utilizzo della nuova API su sistemi vecchi,
ti consiglio di controllare la versione del sistema operativo e, in base ad
essa, utilizzare la funzione giusta. Mi spiego meglio. Se il sistema
operativo installato è Windows 95 B o successivo, puoi tranquillamente usare
la funzione GetDiskFreeSpaceEx; in caso contrario, devi per forza adoperare
l'API GetDiskFreeSpace.
Se ti serve la dichiarazione della nuova funzione (molto diversa dalla
precedente), fammelo sapere.
Per adesso, ciao!
Marco Minerva