Espace disque

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
le_pro_du_pure
Messages : 19
Inscription : mar. 13/avr./2004 9:10
Localisation : Si je ne suis ici, alors, je suis ailleurs.

Espace disque

Message par le_pro_du_pure »

Je voudrais trouver l'espace libre et occupé du disque dur
qqn peut m'aider :?: :?: :?:
mci
le_pro_du_pure
Messages : 19
Inscription : mar. 13/avr./2004 9:10
Localisation : Si je ne suis ici, alors, je suis ailleurs.

Message par le_pro_du_pure »

bon alors, y a qqn :?:
j'suis tt seul #nervous
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
brossden
Messages : 826
Inscription : lun. 26/janv./2004 14:37

Message 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 !
Denis

Bonne Jounée à tous
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ce serait plutôt GetdiscKfreeSpace qui s'utilise de concert avec GetVolumeInformation.
le_pro_du_pure
Messages : 19
Inscription : mar. 13/avr./2004 9:10
Localisation : Si je ne suis ici, alors, je suis ailleurs.

Message 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)
Si les gens pensaient la moitié de ce qu'ils disent, et qu'ils disaient la moitié de ce qu'ils pensent, ils diraient moins de conneries.
le_pro_du_pure
Messages : 19
Inscription : mar. 13/avr./2004 9:10
Localisation : Si je ne suis ici, alors, je suis ailleurs.

Message par le_pro_du_pure »

je pars le nez au vent, sans réflechir ...:
pitite question : comment on se sert de tt ca :?: :?: :?:
Si les gens pensaient la moitié de ce qu'ils disent, et qu'ils disaient la moitié de ce qu'ils pensent, ils diraient moins de conneries.
le_pro_du_pure
Messages : 19
Inscription : mar. 13/avr./2004 9:10
Localisation : Si je ne suis ici, alors, je suis ailleurs.

Message 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 ?
Si les gens pensaient la moitié de ce qu'ils disent, et qu'ils disaient la moitié de ce qu'ils pensent, ils diraient moins de conneries.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Alors tout d'abord lorsque tu utilse une API toujours mettre '_' en clair : GetDiskFreeSpace_()
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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 
 
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
le_pro_du_pure
Messages : 19
Inscription : mar. 13/avr./2004 9:10
Localisation : Si je ne suis ici, alors, je suis ailleurs.

Message 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:
Si les gens pensaient la moitié de ce qu'ils disent, et qu'ils disaient la moitié de ce qu'ils pensent, ils diraient moins de conneries.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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).
Répondre