Newsgroup: it.comp.lang.visual-basic
Titolo: spazio su disco

Sapete come ricavare le informazioni di spazio libero, spazio occupato, etc
in VB ?
Grazie
Enzo

 ha scritto

non mi ricordo dove ho trovato quanto sotto.
apri un nuovo form, incolla il codice, e metti le etichette ecc che servono.
ciao, a.
Option Explicit
Private Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
MEMORYSTATUS)
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Function SayDiskSpace() As String
    Dim r As Long, BytesFreeToCalller As Currency, TotalBytes As Currency
    Dim TotalFreeBytes As Currency, TotalBytesUsed As Currency
    Const RootPathName = "C:\"
    Call GetDiskFreeSpaceEx(RootPathName, BytesFreeToCalller, TotalBytes,
TotalFreeBytes)
    SayDiskSpace = "Total: " & Format$(TotalBytes * 10000,
"###,###,###,##0") & _
        vbCrLf & "Free: " & Format$(TotalFreeBytes * 10000,
"###,###,###,##0") & _
        vbCrLf & "Available: " & Format$(BytesFreeToCalller * 10000,
"###,###,###,##0") & _
        vbCrLf & "Used: " & Format$((TotalBytes - TotalFreeBytes) * 10000,
"###,###,###,##0")
End Function
Public Function GetWinVersion() As String
    Dim Ver As Long, WinVer As Long
    Ver = GetVersion()
    WinVer = Ver And &HFFFF&
    'retrieve the windows version
    GetWinVersion = Format((WinVer Mod 256) + ((WinVer \ 256) / 100),
"Fixed")
End Function
Private Sub cmdOK_Click()
    Unload Me
End Sub
Private Sub Form_Load()
    On Error Resume Next
    Dim MemStat As MEMORYSTATUS
    'retrieve the memory status
    GlobalMemoryStatus MemStat
    lblRAM = Format(Str$(MemStat.dwAvailPageFile / 1024), "###,###,##0,000")
_
        & " M / " & Format(Str$(MemStat.dwTotalPhys / 1024),
"###,###,##0,000") & " M"
    lblWin = GetWinVersion
    lblDisk = SayDiskSpace()
End Sub

 ha scritto nel messaggio
news:98bom1$18u28$1...@ID-51318.news.dfncis.de...





 TotalBytes,TotalFreeBytes)
Esiste solo da Win95 OSR2. Se hai una versione precedente, devi utilizzare
la GetDiskFreeSpace, ma ti ritorna comunque valori non corretti per HD
superiori a 2 GB.
Ciao
*Roby*

 Enzo
the most important thing is the thing most easily forgotten.
-- brian eno, _obscure strategies_
:)
la trovi con esempio nell'api guide, free:
www.allapi.net
ciao, a.

 ha scritto nel messaggio
news:Jbfq6.23181$yl2.5...@news1.tin.it...


 ha scritto nel messaggio
news:6Hcq6.45307$Xj7.3...@news.infostrada.it...

Ti mando come esempio un mio programmino che ti sarà di esempio.
In VB, crea un nuovo progetto.
Sul form, mettici un oggetto MSChart e impostane la proprietà Name = "C", un
oggetto Timer con la proprietà Name = "T".
Nel codice del form, incollaci il seguente.
Option Explicit
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias
"GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String,
lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency,
lpTotalNumberOfFreeBytes As Currency) As Long
Private Sub Form_KeyPress(KeyAscii As Integer)
   If C.chartType = VtChChartType2dPie Then
      C.chartType = VtChChartType2dBar
      C.Stacking = True
   Else
      C.chartType = VtChChartType2dPie
   End If
End Sub
Private Sub Form_Load()
   C.ColumnCount = 2
   C.RowCount = 3 'questo è il numero delle unità
   C.chartType = VtChChartType2dPie
   C.Enabled = False
   T.Interval = 500
   T_Timer
End Sub
Private Sub Form_Resize()
   C.Left = 0
   C.Top = 0
   C.Width = ScaleWidth
   C.Height = ScaleHeight
End Sub
Private Sub GetSpc(Drive As String, Row As Long)
   Dim FBC As Currency, FB As Currency, TB As Currency
   GetDiskFreeSpace Drive, FBC, TB, FB
   C.Row = Row
   C.RowLabel = Drive
   C.Column = 1
   C.Data = (TB - FB) / 100
   C.Column = 2
   C.Data = FB / 100
End Sub
Private Sub T_Timer()
   'se le lettere delle tue unità sono differenti
   'cambia le seguenti righe
   GetSpc "C:", 1
   GetSpc "D:", 2
   GetSpc "E:", 3
End Sub
NOTA
La funzione GetDiskFreeSpaceEx restituisce degli interi a 64 bit.
Il tipo Currency è un intero a 64 bit, ma scalato di 10000, per cui se la
funzione restituisce, ad esempio, 12500, ti ritroverai con 1,25.
Per ottenere il numero intero stai attento nel moltiplicare per 10000,
perché potresti avere un overflow.

 "GetDiskFreeSpaceExA"
Ehm, non facciamo confusione. GetDiskFreeSpace è una api che si usa fino a
Win95 Osr2, da lì in poi si usa la GetDiskFreeSpaceEx. Tu hai dichiarato una
col nome dell'altra. 8-)
Le due dichiarazioni sono:
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias
"GetDiskFreeSpaceExA" (ByVal lpRootPathName As String,
lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency,
lpTotalNumberOfFreeBytes As Currency) As Long
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias
"GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As
Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long,
lpTtoalNumberOfClusters As Long) As Long
Ti allego qui di seguito la funzione che uso normalmente che si occupa di
chiamare l'API corretta in base al sistema operativo attualmente in uso.
Basta ricostruire gli a-capo errati messi da Outlook.
Public Function SpazioLiberoSulDisco(ByVal drive As String, Optional ByRef
DimensioneTotale) As Currency
'***************************************************************************
**********************
' Funzione che permette di verificare lo spazio libero su disco
'
' Parametri:
'   drive   (stringa)   =   unita' periferica da esaminare, passata nel
formato "C:"
'                           se è NULL, l'operazione viene effettuata sul
drive corrente
'   DimensioneTotale    = Se viene passato ritorna la dimensione in byte
totale del disco
'
' Valori di ritorno:
'   ritorna il valore dello spazio libero su quell'unita', espresso in byte
'
'***************************************************************************
**********************
Dim lpSectorPerCluster As Long
Dim lpBytePerSector As Long
Dim lpNumberOfFreeClusters As Long
Dim lpTotalNumberOfClusters  As Long
Dim cBytesFreeToCaller As Currency
Dim cCapacitaDisco As Currency
    On Local Error Resume Next
    Call GetDiskFreeSpaceEx(drive, cBytesFreeToCaller, cCapacitaDisco,
SpazioLiberoSulDisco)
    If Err = 0 Then
        On Local Error GoTo 0
        ' Shifto la parta in virgola del Currency
        DimensioneTotale = cCapacitaDisco * 10000
        SpazioLiberoSulDisco = SpazioLiberoSulDisco * 10000
    Else
        On Local Error GoTo 0
        Call GetDiskFreeSpace(drive, lpSectorPerCluster, lpBytePerSector,
lpNumberOfFreeClusters, lpTotalNumberOfClusters)
        DimensioneTotale = lpTotalNumberOfClusters * lpSectorPerCluster *
lpBytePerSector
        SpazioLiberoSulDisco = lpNumberOfFreeClusters * lpSectorPerCluster *
lpBytePerSector
    End If
End Function
Ciao
*Roby*