Calcul espace disque libre restant

Résolu
elvirez Messages postés 2 Date d'inscription vendredi 8 décembre 2006 Statut Membre Dernière intervention 22 mars 2007 - 21 mars 2007 à 16:32
jmvd2 Messages postés 17 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 16 mars 2010 - 9 sept. 2009 à 12:23
Bonjour a tous !

Un grand merci déja à ceux qui vont peut être m'aider.

Voila mon problème :

J'aurais besoin d'un petit programme qui permettrait de connaitre l'espace disque libre restant  du disque dur sur un PC (windows XP). Si le resultat est inférieur à un certain seuil, alors ca affiche un message d'alerte (afin que l'utilisateur soit prévenu et fasse le ménage).
Ce contrôle serait effectué chaque jour. (pas forcement redémarage de la bécane).

Existe-t-il un moyen simple de faire cela ? Connaissez vous une adresse ou est publier la réponse à mon problème ?...

C'est hors de mes compétences, qui je dois l'avouer sont très limiter en programmation....

C'est tout, merci de votre aide !

lol

elvirez

18 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
22 mars 2007 à 02:24
pourquoi faire simple quand on peut faire compliqué:

Function GetFreePercentDisk(ByVal sDrive As String) As String
    Dim BytesFreeToCalller As Currency
    Dim TotalBytes         As Currency
    Dim TotalFreeBytes     As Currency
       
    Call GetDiskFreeSpaceEx(sDrive, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
    GetFreePercentDisk = Round(100 * TotalFreeBytes / TotalBytes, 2)
   
End Function

Daniel
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mars 2007 à 16:42
Salut,
As tu essayer de rechercher dans les code disponible ici meme?

@+: Ju£i?n
Pensez: Réponse acceptée
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
21 mars 2007 à 16:48
Salut!

L'homme créa la programmation
L'homme programma
L'homme créa le moteur de recherchehttp://www.vbfrance.com/codes/CALCUL-ESPACE-DISQUES_28924.aspx

un peu de recherche c'est hors de tes compétences aussi?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 mars 2007 à 16:57
Salut,

il doit bien y avoir une API qui gère ça.
Sinon, au pire le WMI doit trouver cette info  ;)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
21 mars 2007 à 20:46
 Bonsoir à tous

un exemple tout simple, avec fso, à adapter en vb6.

'Inventaire lecteurs
Dim fso, d, dc, s, n
Set fso = CreateObject("Scripting.FileSystemObject")
Set dc = fso.Drives
For Each d in dc
    Select Case d.DriveType
           Case 2:

             ' Conversion de la taille totale en Go : division par 1073741824 (1024x1024x1024)
             ' Conversion de la taille totale en Mo : division par 1048576 (1024x1024)  

           p = "=> Espace total: " & FormatNumber(d.TotalSize/1024/1024/1024, 1)      & " Go"
           q = "=> Espace disponible: " & FormatNumber(d.AvailableSpace/1024/1024/1024, 1) & " Go"
           s = s & d.DriveLetter & ":" &vbCrLf& p &vbCrLf& q &vbCrLf
           s = s & "Pourcentage occupé :  " &_
               FormatPercent((d.ToTalSize - d.AvailableSpace) / d.ToTalSize, 0)
           s = s &vbCrLf& "Pourcentage libre      :  " &_
               FormatPercent(d.AvailableSpace / d.TotalSize,0) &vbCrLf 

               MsgBox FormatPercent(d.AvailableSpace / d.TotalSize,0)

               If FormatPercent(d.AvailableSpace / d.TotalSize,0) < "20%" Then
                  Msgbox "disk "  & d.DriveLetter &vbTab& "seuil < à 20%",vbCritical
               End If  
          Case Else
   End Select
   Next

MsgBox s,,"Inventaire des Disques"
'---------------------
Pour la périodicité, mettre le code en tâche planifiée est une possibilité.

jean-marc
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 mars 2007 à 22:46
Salut Jean-Marc,

ton code fonctionne parfaitement en VB6 (et avec VB 2005 aussi), juste 2 modifs à faire :
déclarer q et p, et tes &vbCrLf& ainsi que &_ doivent avoir un espace avant et après le &.

Ton code pour VB6 (et colorisé ) :

Option Explicit

Private Sub Form_Load()
'Inventaire lecteurs
Dim fso, d, dc, s, n, q, p
Set fso =  CreateObject("Scripting.FileSystemObject")
Set dc = fso.Drives
For Each d In dc
    Select Case d.DriveType
           Case 2:

             ' Conversion de la taille totale en Go : division par 1073741824 (1024x1024x1024)
             ' Conversion de la taille totale en Mo : division par 1048576 (1024x1024)

           p = "=> Espace total: " & FormatNumber(d.TotalSize / 1024 / 1024 / 1024, 1) & " Go"
           q = "=> Espace disponible: " & FormatNumber(d.AvailableSpace / 1024 / 1024 / 1024, 1) & " Go"
           s = s & d.DriveLetter & ":" & vbCrLf & p & vbCrLf & q & vbCrLf
           s = s & "Pourcentage occupé :  " & _
               FormatPercent((d.TotalSize - d.AvailableSpace) / d.TotalSize, 0)
           s = s & vbCrLf & "Pourcentage libre      :  " & _
               FormatPercent(d.AvailableSpace / d.TotalSize, 0) & vbCrLf

               MsgBox FormatPercent(d.AvailableSpace / d.TotalSize, 0)

               If FormatPercent(d.AvailableSpace / d.TotalSize, 0) < "20%" Then
                  MsgBox "disk " & d.DriveLetter & vbTab & "seuil < à 20%", vbCritical
               End If
          Case Else
   End Select
   Next

MsgBox s, , "Inventaire des Disques"

End Sub

~ <small> Mortalino ~ Colorisation automatique </small>

Bonne soirée à tous !

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 mars 2007 à 22:48
Jean-Marc,

je pense que ça peut valoir le coup de le déposer sur Codyx  ;)
Ce snippet ferai du bien car il n'y est pas !

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mars 2007 à 00:41
Pitié avec cette daube de fso, tout juste bon pour vbscript.

Vous traduirez e VB:

unsigned _int64 bnuGetDiskFreeSpace(char* pszRoot)
{
  ULARGE_INTEGER liFreeBytes, liTotalBytes, liTotalFreeBytes;
  if(!GetDiskFreeSpaceEx(pszRoot, &liFreeBytes, &liTotalBytes, &liTotalFreeBytes)) return 0;
  return (unsigned _int64) liTotalFreeBytes.QuadPart;
}

ciao...
BruNews, MVP VC++
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 mars 2007 à 01:26
Salut BruNews,

ça peut le faire ?

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

Private Sub EXEMPLE()
    
    MsgBox GetFreePercentDisk("C:") '13,42
    MsgBox GetFreePercentDisk("D:") '94,51
    MsgBox GetFreePercentDisk("F:") '29,27
    Unload Me
End Sub

Function GetFreePercentDisk(ByVal sDrive As String) As String
    Dim Sectors As Long, Bytes As Long, FreeC As Long, TotalC As Long, Total As Long, Freeb As Long
        
GetDiskFreeSpace sDrive, Sectors, Bytes, FreeC, TotalC
GetFreePercentDisk =  Space(8)
GetFreePercentDisk = CStr(Round(100 / TotalC * FreeC, 2)) & " %"
End Function

~ <small> Mortalino ~ Colorisation automatique </small>

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mars 2007 à 01:35
NON !!!

GetDiskFreeSpace est obsolète et a été remplacée par la version Ex depuis Win95 SE car elle donne des résultats erronés avec les grands disques, il ne faut absolument plus l'employer.

ciao...
BruNews, MVP VC++
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 mars 2007 à 01:37
Ok bon à savoir,
ne pas prendre en compte les variables inutilisées ^^

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 mars 2007 à 02:05
Bon, j'espère alors que c'est mieux   :

Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long

Function GetFreePercentDisk(ByVal sDrive As String) As String
    Dim BytesFreeToCalller As Currency, TotalBytes As Currency
    Dim TotalFreeBytes As Currency, TotalBytesUsed As Currency
        
Call GetDiskFreeSpaceEx(sDrive, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
GetFreePercentDisk =  Space(8)
GetFreePercentDisk = CStr(Round(100 - (100 / ((TotalBytes * 10000) / 1024 / 1024 / 1024) * (((TotalBytes - TotalFreeBytes) * 10000) / 1024 / 1024 / 1024)), 2)) & " %"

End Function

Private Sub Form_Load()
    MsgBox GetFreePercentDisk("C:") '13.44 %
    MsgBox GetFreePercentDisk("D:") '94.55 %
    MsgBox GetFreePercentDisk("F:")  '29.27 %
    Unload Me
End Sub

~ <small> Mortalino ~ Colorisation automatique </small>

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 mars 2007 à 02:09
plus lisible le 1024 élevé à la puissance 3:
GetFreePercentDisk = CStr(Round(100 - (100 / ((TotalBytes * 10000) / (1024 ^ 3)) * (((TotalBytes - TotalFreeBytes) * 10000) / (1024 ^ 3))), 2)) & " %"

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 mars 2007 à 02:29
Arf, oui, bien vu

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
elvirez Messages postés 2 Date d'inscription vendredi 8 décembre 2006 Statut Membre Dernière intervention 22 mars 2007
22 mars 2007 à 08:22
Merci a tous d'avoir répondu !

Je ne post pas souvent de message sur les forums, je fait d'abord des recherches sur les topics existants (qui est en effet dans mes compétences !!), il est vrai que cette fois ci je suis pressé par le temps....

Merci pour vos codes.

elvirez
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
22 mars 2007 à 17:17
 Bonjour à tous

Salut Mortalino,
Suivant avec opiniatreté les conseils avisés de BruNews, je ne déposerai pas mon p.... de code vbs utilisant ce p..... de fso !!!
BruNews me restreint avec "mon" wmi, wbem, dictionary !!! Exit fso ....
Non, sérieusement, il a surement raison et l'a déjà maintes fois signifié.
Mettre une source en wmi n'est pas justifié, vu la multitude d'exemple via google. 

Daniel Gobillot utilse "GetDiskFreeSpaceEx"....function exclusive de vb6 ???

Toutefois,  il serait peut-être utile, pour l'esthétisme,  de rajouter un test sur Mo ou Go (pour LCID fr-fr).

jean-marc
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mars 2007 à 17:31
GetDiskFreeSpaceEx est API Win exportée par kernel32.dll, rien à voir avec VB.

ciao...
BruNews, MVP VC++
0
jmvd2 Messages postés 17 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 16 mars 2010
9 sept. 2009 à 12:23
Bonjour à tous,
Voici ma version en asp.
Je cherche à interroger des disques distants à partir d'un fichier texte avec mes serveurs dedant. Pouvez-vous m'aider ?



<%
'Inventaire lecteurs
Dim fso, d, dc, s, n
Set fso = CreateObject("Scripting.FileSystemObject")
Set dc = fso.Drives
For Each d in dc
Select Case d.DriveType
Case 2:

' Conversion de la taille totale en Go : division par 1073741824 (1024x1024x1024)
' Conversion de la taille totale en Mo : division par 1048576 (1024x1024)

p = " " & "Espace total: " & FormatNumber(d.TotalSize/1024/1024/1024, 1) & " Go "
q = "=> Espace disponible: " & FormatNumber(d.AvailableSpace/1024/1024/1024, 1) & " Go" & "
"
s = s & d.DriveLetter & ":" &vbCrLf& p &vbCrLf& q &vbCrLf
s = s & " Pourcentage occupé : " &_
FormatPercent((d.ToTalSize - d.AvailableSpace) / d.ToTalSize, 0)
s = s &vbCrLf& "Pourcentage libre : " &_
FormatPercent(d.AvailableSpace / d.TotalSize,0) & "
" &vbCrLf

If FormatPercent(d.AvailableSpace / d.TotalSize,0) > "10%" Then
Response.Write ( "disk " & d.DriveLetter &vbTab& "Alerte ! Seuil < à 20%" & " " & "
")
End If
Case Else
End Select
Next

'MsgBox s,,"Inventaire des Disques"
Response.Write ( s )

%>

J.Michel
0
Rejoignez-nous