Page 1 sur 1

Espace disque

Publié : mar. 13/avr./2004 9:15
par le_pro_du_pure
Je voudrais trouver l'espace libre et occupé du disque dur
qqn peut m'aider :?: :?: :?:
mci

Publié : mar. 13/avr./2004 9:25
par le_pro_du_pure
bon alors, y a qqn :?:
j'suis tt seul #nervous

Publié : mar. 13/avr./2004 10:24
par Le Soldat Inconnu
Oula, quelle patience, j'ai le code tout près sur mon pc mais je me demande si je le poste :roll:
je verrai ça demain ou dans la semaine

parce que dire ça au bout de 10 minutes, tu abuses :wink:

Publié : mar. 13/avr./2004 10:45
par brossden
Bonjour

Même causes même effets !

On peut quand même te dire que tu devrais voir l'API

GetVolumeInformation qui répond à ta demande !

Publié : mar. 13/avr./2004 11:28
par nico
Ce serait plutôt GetdiscKfreeSpace qui s'utilise de concert avec GetVolumeInformation.

Publié : mar. 13/avr./2004 18:27
par le_pro_du_pure
Désolé de mon empressement, je reconnais que j'ai abusé :oops:
j'examine les réponces et je vous dis 8)

Publié : mar. 13/avr./2004 18:51
par le_pro_du_pure
je pars le nez au vent, sans réflechir ...:
pitite question : comment on se sert de tt ca :?: :?: :?:

Publié : mar. 13/avr./2004 19:26
par le_pro_du_pure
Ce c... d'ordi me crache le message GetDiskFreeSpace() is not a function, an array...et tt son baratin :evil:
qu'est ce que je fais ???????

ps: ??? ça change de :?: :?: :?: , non ?

Publié : mar. 13/avr./2004 20:15
par Heis Spiter
Alors tout d'abord lorsque tu utilse une API toujours mettre '_' en clair : GetDiskFreeSpace_()

Publié : mar. 13/avr./2004 20:35
par Chris
Un code de Danilo, sur le forum anglais

Code : Tout sélectionner

drive.s = "C:\"
Structure Quad
  L1.l
  L2.l
EndStructure

GetDiskFreeSpaceEx_(drive, FB.Quad, TB.Quad, TFB.Quad)
TB.Quad\L1>>20
TB.Quad\L2<<12
TotalGB.f = (TB.Quad\L1 + TB.Quad\L2) / 1024

TFB.Quad\L1>>20
TFB.Quad\L2<<12
FreeGB.f = (TFB.Quad\L1 + TFB.Quad\L2) / 1024

UsedGB.f = TotalGB - FreeGB

MessageRequester("Disk Size drive "+drive,"Space Total: "+StrF(TotalGB,2)+" GB"+Chr(13)+"Space Free : "+StrF(FreeGB,2)+" GB"+Chr(13)+"Space Used: "+StrF(UsedGB,2)+" GB",0)
End
Chris :)

Publié : mar. 13/avr./2004 21:13
par nico
Ce code à été construit à partir du code du Soldat:
N'oublier pas de clicker sur continuer pour le lecteur de disquette!


Affiche tous les lecteurs ainsi que l'espace libre et total .

Code : Tout sélectionner

Structure DriveInfos 
  DriveLetter.s 
  DriveType.l 
  DriveTypeString.s 
  NameOfVolume.s 
EndStructure 
NewList DriveList.DriveInfos() 

Procedure GetDrive(ListDriveType.l) 
  Protected drive.s, DriveLetter.s, DriveType.l, Start.l, LengthDrive.l, DriveTypeString.s 
  #REMOVABLE_DRIVE = 1 
  #FIXED_DRIVE = 2 
  #REMOTE_DRIVE = 4 
  #CDROM_DRIVE = 8 
  #RAMDISK_DRIVE = 16 
  #UNKNOWN_DRIVE = 32 
  #ALL_DRIVE = 63 
  
  ; On vide la liste 
  ClearList(DriveList()) 
  
  ; On récupère la lettre des différents lecteurs présent sur l'ordinateur 
  drive = Space(255) 
  LengthDrive = GetLogicalDriveStrings_(255, @drive) 
  
  For Start = 0 To LengthDrive - 4 Step 4 
    
    DriveLetter.s = PeekS(@drive + Start, 3) ; on récupère une lettre 
    
    DriveType.l = GetDriveType_(@DriveLetter) ; on récupère le type du lecteur 
    
    Select DriveType ; On donne un nom au type de lecteur 
      Case #DRIVE_REMOVABLE : DriveType = #REMOVABLE_DRIVE : DriveTypeString.s = "Disquette" 
      Case #DRIVE_FIXED : DriveType = #FIXED_DRIVE : DriveTypeString.s = "Disque dur" 
      Case #DRIVE_REMOTE : DriveType = #REMOTE_DRIVE : DriveTypeString.s = "Lecteur réseau" 
      Case #DRIVE_CDROM : DriveType = #CDROM_DRIVE : DriveTypeString.s = "CD-ROM" 
      Case #DRIVE_RAMDISK : DriveType = #RAMDISK_DRIVE : DriveTypeString.s = "RamDisk" 
      Case #DRIVE_UNKNOWN : DriveType = #UNKNOWN_DRIVE : DriveTypeString.s = "" 
    EndSelect 
    
    If DriveType & ListDriveType ; on regarde si le type du lecteur correspond à ceux demandés 
      AddElement(DriveList()) 
      DriveList()\DriveLetter = RemoveString(DriveLetter, "\") 
      DriveList()\DriveType = DriveType 
      DriveList()\DriveTypeString = DriveTypeString 
      
      If DriveLetter <> "A:\" And DriveLetter <> "B:\" 
        DriveList()\NameOfVolume = Space(255) 
        GetVolumeInformation_(@DriveLetter, @DriveList()\NameOfVolume, 255, 0, 0, 0, 0, 0) 
        DriveList()\NameOfVolume = Trim(DriveList()\NameOfVolume) 
      Else 
        DriveList()\NameOfVolume = "" 
      EndIf 
      
    EndIf 
    
  Next 
EndProcedure 




;- Debut du test 

GetDrive(#REMOVABLE_DRIVE | #CDROM_DRIVE | #FIXED_DRIVE) 

ResetList(DriveList()) 
While NextElement(DriveList())
  
  Debug DriveList()\DriveLetter + "   " + DriveList()\DriveTypeString + "   " + DriveList()\NameOfVolume 
  
;  If DriveList()\DriveType = #FIXED_DRIVE 
    Patch.s=DriveList()\DriveLetter 
    GetDiskFreeSpace_(Patch, @dwSectorsPerCluster.l, @dwBytesPerCluster.l, @dwFreeClusters.l, @dwTotalClusters.l)
    
    a.f=dwFreeClusters/1000000
    b.f=dwTotalClusters/1000000
    
    EspaceLibre.l= dwBytesPerCluster*dwSectorsPerCluster*a
    EspaceTotal.l= dwBytesPerCluster*dwSectorsPerCluster*b
    
;     Debug dwSectorsPerCluster
;     Debug dwBytesPerCluster
;     Debug dwFreeClusters
;     Debug dwTotalClusters
    
;     le résultat est arrondi au dernier chiffre  
    Debug "Espace Total="+Str(EspaceTotal)+" Mo   ,"+"Espace Libre="+Str(EspaceLibre)+" Mo"
;  EndIf
  Debug ""
Wend 
 

Publié : mar. 13/avr./2004 21:29
par Le Soldat Inconnu
ma solution :

Code : Tout sélectionner

Procedure.l GetDiskFreeSpace(lecteur.s, type.l)
  ; lecteur = nom du lecteur
  ; type = choix de la réponse, 0 = espace libre sur le lecteur, 1 = taille du lecteur
  ; la taille retourné est en ko
  
  Protected val.l
  Protected txt.s
  
  Memory1 = AllocateMemory(1, 5, 0)
  Memory2 = AllocateMemory(2, 5, 0)
  Memory3 = AllocateMemory(3, 5, 0)
  GetDiskFreeSpaceEx_(lecteur + ":\", Memory1, Memory2, Memory3)
  
  Select type
    Case 0 : Memory1 + 1 : CopyMemory(Memory1, @size.l, 4)
    Case 1 : Memory2 + 1 : CopyMemory(Memory2, @size.l, 4)
  EndSelect
  
  size = size / 4
  
  ProcedureReturn size
EndProcedure

Procedure.s GetDiskFreeSpaceEx(lecteur.s, type.l, unit.l, approximation.l, auto.l)
  ; lecteur = nom du lecteur
  ; type = choix de la réponse, 0 = espace libre sur le lecteur, 1 = taille du lecteur
  ; unit = unité de la taille, 0 = Ko, 1 = Mo, 2 = Go
  ; approximation = nombre de chiffre après la virgule
  ; si auto = 1, choix de l'unité automatique et approximation automatique
  
  Protected val.l
  Protected txt.s
  
  Memory1 = AllocateMemory(1, 5, 0)
  Memory2 = AllocateMemory(2, 5, 0)
  Memory3 = AllocateMemory(3, 5, 0)
  GetDiskFreeSpaceEx_(lecteur + ":\", Memory1, Memory2, Memory3)
  
  Select type
    Case 0 : Memory1 + 1 : CopyMemory(Memory1, @size.l, 4)
    Case 1 : Memory2 + 1 : CopyMemory(Memory2, @size.l, 4)
  EndSelect
  
  size = size / 4
  
  If auto
    approximation = 0 : unit = 0
    If size >= 1000 : unit = 1 : approximation = 2 : EndIf
    If size >= 10000 : unit = 1 : approximation = 1 : EndIf
    If size >= 1000000 : unit = 2 : approximation = 2 : EndIf
    If size >= 10000000 : unit = 2 : approximation = 1 : EndIf
  EndIf
  Select unit
    Case 1 : val = 1024 : txt = " Mo"
    Case 2 : val = 1024 * 1024 : txt = " Go"
    Default : val = 1 : txt = " Ko"
  EndSelect
  ProcedureReturn StrF(size / val, approximation) + txt
  
EndProcedure



Debug GetDiskFreeSpace("c", 1)
Debug GetDiskFreeSpaceEx("c", 1, 0, 0, 1)
avec 2 type de résultat, soit la taille en ko de l'espace libre, soit l'affichage sous forme de texte de l'espace libre (ou de la taille du disque)

Publié : mer. 14/avr./2004 12:53
par le_pro_du_pure
Mon code, après avoir bcp réflechi :

Code : Tout sélectionner

lect.s = "C:\"

GetDiskFreeSpace_(lect, @Secteurs_Par_Cluster, @Bytes_Par_Secteurs, @Cluster_libre, @Total_Cluster)

espace_libre = (((Cluster_libre * Secteurs_Par_Cluster) / 1024) * Bytes_Par_Secteurs) / 1024
espace_total = (((Total_Cluster * Secteurs_Par_Cluster) / 1024) * Bytes_Par_Secteurs) / 1024
espace_utilise = espace_total - espace_libre
pourcent_espace_libre = (100 * espace_libre) / espace_total

MessageRequester("Lecteur :", "Lecteur : " + lect, 0)
MessageRequester("Secteur par clusteur : ", "Secteur par clusteur : " + Str(Secteurs_Par_Cluster), 0)
MessageRequester("Bytes par secteurs : ", "Bytes par secteurs : " + Str(Bytes_Par_Secteurs), 0)
MessageRequester("Cluster libres : ", "Cluster libres : " + Str(Cluster_libre), 0)
MessageRequester("Nombre total de cluster : ", "Nombre total de cluster : " + Str(Total_Cluster), 0)
MessageRequester("Capacité du lecteur : ", "Capacite du lecteur : " + Str(espace_total) + " Mo", 0)
MessageRequester("Espace utilisé : ", "Espace utilisé : " + Str(espace_utilise) + " Mo", 0)
MessageRequester("Espace libre : ", "Espace libre : " + Str(espace_libre) + " Mo", 0)
MessageRequester("Pourcentage d'espace libre : ", "Pourcentage d'espace libre : " + Str(pourcent_espace_libre) + " %", 0)
Il est plus c... que les vôtres :lol:

Publié : mer. 14/avr./2004 13:07
par Anonyme2
Je me souviens d'un post sur le forum anglais sur ce sujet et aussi du fait qu'il fallait faire attention aux valeurs retournées car il pouvait y avoir un dépassement de capacités avec les entiers (enfin il me semble me souvenir de ça).