Il me semble avoir croisé un code un jour pouvant montrer l'espace restant d'un disque dur ou d'une clé usb mais impossible de mettre la main dessus. Est-ce que ça parle à quelqu'un ?
En résumé je fais un soft de sauvegarde automatisé (le plus basique qui soit) et je souhaiterai qu'avant de lancer la copie, il puisse (tout de même) vérifier que le contenu du répertoire et des sous répertoires à copier soient plus petit que la cible (clé usb par exemple).
Si quelqu'un à ça sous la main.
Pour le poids du dossier je suppose qu'ExamineDirectory et ses copains sont indispensable mais pour la taille restante d'un volume comme un DDur, il doit bien y avoir un API qui traine ?
D'avance merci
[Resolu] Déterminer l'espace restant d'un volume ?
[Resolu] Déterminer l'espace restant d'un volume ?
Dernière modification par Ar-S le mar. 03/août/2010 21:58, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Déterminer l'espace restant d'un volume ?
Essayes ce code..
Code : Tout sélectionner
Structure int64
Long1.l
Long2.l
EndStructure
drive$ = "c:\"
SetErrorMode_(#SEM_FAILCRITICALERRORS)
If GetDiskFreeSpaceEx_(@drive$, BytesFreeToCaller.int64, TotalBytes.int64, TotalFreeBytes.int64) = 0
MessageRequester("","Unité non prête!",0)
End
EndIf
; initailisation de l'erreur msg
SetErrorMode_(0)
; calcul de la taille en Mb
TotalMB = ((TotalBytes\Long1 >> 20) & $FFF) | (TotalBytes\Long2 << 12)
FreeMB = ((TotalFreeBytes\Long1 >> 20) & $FFF) | (TotalFreeBytes\Long2 << 12)
Debug "Disk: "+drive$
Debug "Taille totale: "+Str(TotalMB)+" Mb"
Debug "Espace libre:"+Str(FreeMB)+" Mb"
End
Mekkisoft Editeur de logiciels et sites web
Re: Déterminer l'espace restant d'un volume ?
Ou alors (si c'est un répertoire)...
Code : Tout sélectionner
;Pour la taille d'un répertoire, il suffit de calculer la différence
;entre la taille de ton fichier et la taille du répertoire destinataire
;(que tu connaitras grâce à cette procédure ci-dessous), sinon il faudra
;créer une fonction qui le ferait en jumulant les deux...
Procedure.l DirectorySize(ID.l, Directory.s)
Protected Size.l
If ExamineDirectory(ID, Directory, "*.*")
Repeat
Entry.l = NextDirectoryEntry()
If Entry = 1
Size + DirectoryEntrySize()
ElseIf Entry = 2
Name.s = DirectoryEntryName()
If Name <> ".." And Name <> "."
Size + DirectorySize(ID+1, Directory+Name+"\")
UseDirectory(ID)
EndIf
EndIf
Until Entry = 0
EndIf
ProcedureReturn Size
EndProcedure
;test
Debug DirectorySize(0, "C:\purebasic\")
END
Mekkisoft Editeur de logiciels et sites web
Re: Déterminer l'espace restant d'un volume ?
la 1ere procédure est parfaite merci, ça fait plaisir de te voir poser du code fonctionnel.
Par contre la seconde ne fonctionne pas
Dans une commande NextDirectoryEntry() il faut indiquer le #directoryentry entre les ()
idem pour DirectoryEntrySize(), etc..
Mais je vais me débrouiller.
Merci !
Par contre la seconde ne fonctionne pas
Dans une commande NextDirectoryEntry() il faut indiquer le #directoryentry entre les ()
idem pour DirectoryEntrySize(), etc..
Mais je vais me débrouiller.
Merci !

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Déterminer l'espace restant d'un volume ?
http://www.purebasic.fr/english/viewtop ... 325#p43325
et
http://www.purebasic.fr/english/viewtop ... 28#p105128
Rendons à César ce qui est à ....
et
http://www.purebasic.fr/english/viewtop ... 28#p105128
Rendons à César ce qui est à ....

-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Déterminer l'espace restant d'un volume ?
allez, en français, avec mise en forme
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Obtenir l'espace libre ou la taille d'un lecteur, ou afficher l'espace libre ou la taille d'un lecteur (unité et précision personnalisable)
Procedure.q GetDiskFreeSpace(Lecteur.s, Type.l = 0)
; lecteur = nom du lecteur
; type = choix de la réponse, 0 = espace libre sur le lecteur, 1 = taille du lecteur
Protected EspaceLibre.q, Taille.q, resultat.q
GetDiskFreeSpaceEx_(Lecteur, @EspaceLibre, @Taille, 0)
Select Type
Case 0 : resultat = EspaceLibre
Case 1 : resultat = Taille
EndSelect
ProcedureReturn resultat
EndProcedure
Procedure.s DisplayDiskFreeSpace(Taille.q, Unite.l = -1, NbDecimals.l = -1)
; Taille = taille du lecteur
; Unite = unité de la taille, 0 = Octet, 1 = Ko, 2 = Mo, 3 = Go. Si = -1, Le choix de l'unité et du nombre de décimal sera automatique
; NbDecimals = nombre de chiffre après la virgule.
Protected Val.q, Txt.s
If Unite = -1
NbDecimals = 0 : Unite = 0
If Taille >= 1000 : Unite = 1 : NbDecimals = 2 : EndIf
If Taille >= 10000 : Unite = 1 : NbDecimals = 1 : EndIf
If Taille >= 1000000 : Unite = 2 : NbDecimals = 2 : EndIf
If Taille >= 10000000 : Unite = 2 : NbDecimals = 1 : EndIf
If Taille >= 1000000000 : Unite = 3 : NbDecimals = 2 : EndIf
If Taille >= 10000000000: Unite = 3 : NbDecimals = 1 : EndIf
EndIf
Select Unite
Case 0 : Val = 1 : Txt = " octets"
Case 1 : Val = 1024 : Txt = " Ko"
Case 2 : Val = 1024 * 1024 : Txt = " Mo"
Case 3 : Val = 1024 * 1024 * 1024 : Txt = " Go"
EndSelect
ProcedureReturn StrF(Taille / Val, NbDecimals) + Txt
EndProcedure
;- Test
Debug GetDiskFreeSpace("c:\program files\", 1)
Debug DisplayDiskFreeSpace(GetDiskFreeSpace("c:\program files\", 1))
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: [Resolu] Déterminer l'espace restant d'un volume ?
Merci à tous.
@flaith => certes mais l'intention est là
@LSI j'ai donc testé les 2 commandes sur le même répertoire, (enfin sur le même DD)
ça marche au poil.
@flaith => certes mais l'intention est là

@LSI j'ai donc testé les 2 commandes sur le même répertoire, (enfin sur le même DD)
ça marche au poil.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels