Calcul espace disque libre restant [Résolu]

Messages postés
2
Date d'inscription
vendredi 8 décembre 2006
Dernière intervention
22 mars 2007
- - Dernière réponse : jmvd2
Messages postés
17
Date d'inscription
vendredi 11 avril 2003
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
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Gobillot
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Salut,
As tu essayer de rechercher dans les code disponible ici meme?

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
0
Merci
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:
Commenter la réponse de drikce06
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
0
Merci
 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
Commenter la réponse de cs_JMO
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
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++
Commenter la réponse de BruNews
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
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++
Commenter la réponse de BruNews
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
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>
Commenter la réponse de mortalino
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
0
Merci
Arf, oui, bien vu

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Commenter la réponse de mortalino
Messages postés
2
Date d'inscription
vendredi 8 décembre 2006
Dernière intervention
22 mars 2007
0
Merci
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
Commenter la réponse de elvirez
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
0
Merci
 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
Commenter la réponse de cs_JMO
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
GetDiskFreeSpaceEx est API Win exportée par kernel32.dll, rien à voir avec VB.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
17
Date d'inscription
vendredi 11 avril 2003
Dernière intervention
16 mars 2010
0
Merci
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
Commenter la réponse de jmvd2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.