
Taille d'un dossier
Re: Taille d'un dossier
Bin oui ont m'attaque ici alors au lieux de ménèrver, je laisser tomber 

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
- Mindphazer
- Messages : 695
- Inscription : mer. 24/août/2005 10:42
Re: Taille d'un dossier
Personne ne t'attaque.
On t'a simplement dit que s'il y avait un domaine dans lequel tu devrais la mettre en veilleuse, c'est l'orthographe.
On t'a simplement dit que s'il y avait un domaine dans lequel tu devrais la mettre en veilleuse, c'est l'orthographe.
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Taille d'un dossier
Pour ma part, avec le code de Jacobus qui compte avant de chercher la taille, pour un dossier de 695 775 Fichiers, 22 591 Dossiers (environ 100Go), le premier comptage prend 2min environ
en temps qu'utilisateur, je trouve ça assez long !
Ensuite, effectivement, le phénomène de cache ramène le temps à 10 sec. Cependant, je ne pense pas qu'il faille compter la dessus, si on regarde la taille d'un dossier, c'est justement qu'on ne la connais pas
pour info : DD 7200tr/min
en temps qu'utilisateur, je trouve ça assez long !
Ensuite, effectivement, le phénomène de cache ramène le temps à 10 sec. Cependant, je ne pense pas qu'il faille compter la dessus, si on regarde la taille d'un dossier, c'est justement qu'on ne la connais pas

pour info : DD 7200tr/min
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Taille d'un dossier
T'as un proco à jambe de bois ou quoi ?! 2min
... y doit être suisse.
Le code n'est pas de moi mais de LSI. Je n'ai fais que rajouter une progressbar. En fait là on ne calcule pas QUE la taille d'un dossier.

Le code n'est pas de moi mais de LSI. Je n'ai fais que rajouter une progressbar. En fait là on ne calcule pas QUE la taille d'un dossier.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Taille d'un dossier
Idem chez moi, sur un portable avec 30go de données sous C, il faut bien 40s de scan pour le comptage et 5 secondes pour le calcul. Après, avec le phénomène de cache, ça va plus vite 2s de comptage et 5 secondes de calcul.
C'est la raison pour la laquelle je n'ai pas mis de barre de progression
C'est la raison pour la laquelle je n'ai pas mis de barre de progression
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: Taille d'un dossier
Ah ce moment peut-être faudrait il mettre un thread faisant apparaitre une barre de progression allant de 1 à x en boucle jusqu'à la fin du listage, cela prendrait peut-être moins de temps.
~~~~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
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Taille d'un dossier
Nouvelle version :
- J'ai inclus les morceaux de ma librairie GetIcon pour que tous le monde puisse avoir les icônes
- Je change le curseur de la souris pendant l'analyse pour montrer que le programme travaille
- J'ai inclus les morceaux de ma librairie GetIcon pour que tous le monde puisse avoir les icônes
- Je change le curseur de la souris pendant l'analyse pour montrer que le programme travaille
Code : Tout sélectionner
Procedure.s DisplaySize(Size.q, Unit.l = -1, NbDecimals.l = 0)
Enumeration
#DisplaySize_Unit_Octect
#DisplaySize_Unit_Ko
#DisplaySize_Unit_Mo
#DisplaySize_Unit_Go
#DisplaySize_Unit_To
EndEnumeration
; Size = taille
; Unit = unité de la taille, 0 = Octect, 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 Value.q, Text.s
If Unit = -1
If Size >= 10000000000000 : Unit = 4 : NbDecimals = 1
ElseIf Size >= 1000000000000 : Unit = 4 : NbDecimals = 2
ElseIf Size >= 10000000000 : Unit = 3 : NbDecimals = 1
ElseIf Size >= 1000000000 : Unit = 3 : NbDecimals = 2
ElseIf Size >= 10000000 : Unit = 2 : NbDecimals = 1
ElseIf Size >= 1000000 : Unit = 2 : NbDecimals = 2
ElseIf Size >= 10000 : Unit = 1 : NbDecimals = 1
ElseIf Size >= 1000 : Unit = 1 : NbDecimals = 2
ElseIf Size >= 1 : Unit = 0 : NbDecimals = 0
Else
NbDecimals = 0
EndIf
EndIf
Select Unit
Case -1 : Value = 1 : Text = " octet"
Case 0 : Value = 1 : Text = " octets"
Case 1 : Value = 1024 : Text = " Ko"
Case 2 : Value = 1024 * 1024 : Text = " Mo"
Case 3 : Value = 1024 * 1024 * 1024 : Text = " Go"
Case 4 : Value = 1024 * 1024 * 1024 * 1024 : Text = " To"
EndSelect
ProcedureReturn StrD(Size / Value, NbDecimals) + Text
EndProcedure
Procedure.s DisplayName(File.s, CSIDL.l = -1)
Protected FileInfo.SHFILEINFO, Name.s, PIDL.l
If File
CoInitialize_(0)
SHGetFileInfo_(File, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_DISPLAYNAME)
Name = PeekS(@FileInfo\szDisplayName)
CoUninitialize_()
ElseIf CSIDL >= 0
If SHGetSpecialFolderLocation_(0, CSIDL, @PIDL) = 0
SHGetFileInfo_(PIDL, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_PIDL | #SHGFI_DISPLAYNAME)
Name = PeekS(@FileInfo\szDisplayName)
EndIf
EndIf
ProcedureReturn Name
EndProcedure
CompilerIf Defined(GetIconFile, #PB_Function) = 0
#SHIL_SMALL = $1
#SHIL_LARGE = $0
#SHIL_EXTRALARGE = $2
#SHIL_JUMBO = $4
#LOAD_LIBRARY_AS_DATAFILE = 2
DataSection
IID_IImageList:
Data.l $46EB5926
Data.w $582E,$4017
Data.b $9F,$DF,$E8,$99,$8D,$AA,$09,$50
EndDataSection
Structure IMAGELISTDRAWPARAMS
cbSize.l
himl.l
i.l
hdcDst.l
x.l
y.l
cx.l
cy.l
xBitmap.l
yBitmap.l
rgbBk.l
rgbFg.l
fStyle.l
dwRop.l
fState.l
frame.l
crEffect.l
EndStructure
Interface IImageList2 Extends iUnknown
Add(hbmImage, hbmMask, pi)
ReplaceIcon(i, hIcon, pi)
SetOverlayImage(iImage, iOverlay)
Replace(i, hbmImage, hbmMask)
AddMasked(hbmImage, crMask, pi)
Draw(pimldp.IMAGELISTDRAWPARAMS)
Remove(i)
GetIcon(i, flags, picon)
GetImageInfo(i, pImageInfo.IMAGEINFO)
Copy(iDst, punkSrc.IImageList, iSrc, uFlags)
Merge(i1, punk2.IImageList, i2, dx, dy, riid, ppv)
Clone(riid, ppv)
GetImageRect(i, prc.RECT)
GetIconSize(cx, cy)
SetIconSize(cx, cy)
GetImageCount(pi)
SetImageCount(uNewCount)
SetBkColor(clrBk, pclr)
GetBkColor(pclr)
BeginDrag(iTrack, dxHotspot, dyHotspot)
EndDrag()
DragEnter(hwndLock, x, y)
DragLeave(hwndLock)
DragMove(x, y)
SetDragCursorImage(punk.IImageList, iDrag, dxHotspot, dyHotspot)
DragShowNolock(fShow)
GetDragImage(ppt.POINT, pptHotspot.POINT, riid, ppv)
GetItemFlags(i, dwFlags)
GetOverlayImage(iOverlay, piIndex)
EndInterface
Global OS
OS = OSVersion()
Procedure.l GetIconFile(IconFile.s, Size.l) ; Get icon 16*16, 32*32 or 48*48
Protected hIcon.l, FileInfo.SHFILEINFO, dll_Shell32.l, hResult.l, *Guid.l
Select Size
Case #SHIL_SMALL, 16
SHIL = #SHIL_SMALL
Case #SHIL_LARGE, 32
SHIL = #SHIL_LARGE
Case #SHIL_EXTRALARGE, 48
SHIL = #SHIL_EXTRALARGE
Case #SHIL_JUMBO, 128, 256
If OS >= #PB_OS_Windows_Vista
SHIL = #SHIL_JUMBO
Else
SHIL = #SHIL_EXTRALARGE
EndIf
Default
SHIL = #SHIL_SMALL
EndSelect
If OS >= #PB_OS_Windows_XP ; Pour Windows XP et plus, toute taille d'icône
dll_Shell32 = OpenLibrary(#PB_Any, "Shell32.dll")
If dll_Shell32
*Guid = ?IID_IImageList
SHGetFileInfo_(IconFile, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_SYSICONINDEX)
hResult = CallFunction(dll_Shell32, "SHGetImageList", SHIL, *Guid, @ImageList.IImageList2)
If hResult = 0
ImageList\GetIcon(FileInfo\iIcon, #ILD_TRANSPARENT, @hIcon)
ImageList\Release()
EndIf
CloseLibrary(dll_Shell32)
EndIf
Else ; Avant windows XP, icône 16*16 ou 32*32
If SHIL = #SHIL_EXTRALARGE Or SHIL = #SHIL_LARGE
SHGetFileInfo_(IconFile, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_LARGEICON)
hIcon = InfosFile\hIcon
Else
SHGetFileInfo_(IconFile, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_SMALLICON)
hIcon = InfosFile\hIcon
EndIf
EndIf
ProcedureReturn hIcon
EndProcedure
Procedure ExtractIconFile(IconFile.s, IconIndex.l, Size.l) ; Extract icon from library or exe
Protected hLibrary, hIcon.l
If IconIndex > 0
hLibrary = LoadLibraryEx_(IconFile, #Null, #LOAD_LIBRARY_AS_DATAFILE)
If hLibrary <> #Null
If IconIndex >> 16
hIcon = LoadImage_(hLibrary, PeekS(IconIndex), #IMAGE_ICON, Size, Size, 0)
Else
hIcon = LoadImage_(hLibrary, IconIndex & $FFFF, #IMAGE_ICON, Size, Size, 0)
EndIf
FreeLibrary_(hLibrary)
EndIf
Else
hIcon = GetIconFile(IconFile, Size)
EndIf
ProcedureReturn hIcon
EndProcedure
CompilerEndIf
Enumeration
#DirectorySize_State_Stop
#DirectorySize_State_Start
#DirectorySize_State_Finish
EndEnumeration
Structure DirectorySizeInformation
Name.s
Size.q
FileCounter.q
HideFileCounter.q
DirectoryCounter.q
HideDirectoryCounter.q
State.i
Icon.i
EndStructure
Global NewList DirectorySize.DirectorySizeInformation()
Global GetDirectorySize_Stop.i, DirectorySize_Directory.s, GetDirectorySize_Gadget.i, DirectorySize_IconSize.i, DirectorySize_IconDetail.i, DirectorySize_Cursor_Wait.i, DirectorySize_Cursor_Normal.i, GetDirectorySize_Running.i
Procedure GetDirectorySize_SubClassProc(hwnd, msg, wparam, lparam)
oldproc = GetProp_(hwnd, "oldproc")
Select msg
Case #WM_NCDESTROY
RemoveProp_(hwnd, "oldproc")
Case #WM_SETCURSOR
If GetDirectorySize_Running
SetCursor_(DirectorySize_Cursor_Wait)
Else
SetCursor_(DirectorySize_Cursor_Normal)
EndIf
ProcedureReturn 0
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hwnd, msg, wparam, lparam)
EndProcedure
Procedure GetDirectorySize_Display(Force = 0)
Static Time.i
Protected *DirectorySize.DirectorySizeInformation, Size.q, FileCounter.q, DirectoryCounter.q, HideFileCounter.q, HideDirectoryCounter.q, Text.s
ActualTime = ElapsedMilliseconds()
If Time = 0 Or ActualTime - Time > 200 Or Force
Time = ActualTime
*DirectorySize = @DirectorySize()
FirstElement(DirectorySize())
If DirectorySize()\State <> #DirectorySize_State_Stop
If DirectorySize()\State = #DirectorySize_State_Finish
DirectorySize()\State = #DirectorySize_State_Stop
EndIf
SetGadgetItemText(GetDirectorySize_Gadget, 1, DisplaySize(DirectorySize()\Size))
If DirectorySize()\FileCounter > 1
Text = "Fichiers : "
Else
Text = "Fichier : "
EndIf
Text + Str(DirectorySize()\FileCounter)
If DirectorySize()\HideFileCounter > 1
Text + " [+" + Str(DirectorySize()\HideFileCounter) + " cachés]"
ElseIf DirectorySize()\HideFileCounter > 0
Text + " [+" + Str(DirectorySize()\HideFileCounter) + " caché]"
EndIf
SetGadgetItemText(GetDirectorySize_Gadget, 2, Text)
If DirectorySize()\DirectoryCounter > 1
Text = "Dossiers : "
Else
Text = "Dossier : "
EndIf
Text + Str(DirectorySize()\DirectoryCounter)
If DirectorySize()\HideDirectoryCounter > 1
Text + " [+" + Str(DirectorySize()\HideDirectoryCounter) + " cachés]"
ElseIf DirectorySize()\HideDirectoryCounter > 0
Text + " [+" + Str(DirectorySize()\HideDirectoryCounter) + " caché]"
EndIf
SetGadgetItemText(GetDirectorySize_Gadget, 3, Text)
EndIf
If ListSize(DirectorySize()) > 1
LastElement(DirectorySize())
If DirectorySize()\State = #DirectorySize_State_Finish
DirectorySize()\State = #DirectorySize_State_Stop
DirectorySize()\Icon = GetIconFile(DirectorySize_Directory + DirectorySize()\Name, 16)
DirectorySize()\Name = DisplayName(DirectorySize_Directory + DirectorySize()\Name)
Index = CountGadgetItems(GetDirectorySize_Gadget)
AddGadgetItem(GetDirectorySize_Gadget, Index, DirectorySize()\Name, DirectorySize()\Icon, 2)
AddGadgetItem(GetDirectorySize_Gadget, Index + 1, DisplaySize(DirectorySize()\Size), DirectorySize_IconSize, 3)
If DirectorySize()\FileCounter > 1
Text = "Fichiers : "
Else
Text = "Fichier : "
EndIf
Text + Str(DirectorySize()\FileCounter)
If DirectorySize()\HideFileCounter > 1
Text + " [+" + Str(DirectorySize()\HideFileCounter) + " cachés]"
ElseIf DirectorySize()\HideFileCounter > 0
Text + " [+" + Str(DirectorySize()\HideFileCounter) + " caché]"
EndIf
AddGadgetItem(GetDirectorySize_Gadget, Index + 2, Text, 0, 3)
If DirectorySize()\DirectoryCounter > 1
Text = "Dossiers : "
Else
Text = "Dossier : "
EndIf
Text + Str(DirectorySize()\DirectoryCounter)
If DirectorySize()\HideDirectoryCounter > 1
Text + " [+" + Str(DirectorySize()\HideDirectoryCounter) + " cachés]"
ElseIf DirectorySize()\HideDirectoryCounter > 0
Text + " [+" + Str(DirectorySize()\HideDirectoryCounter) + " caché]"
EndIf
AddGadgetItem(GetDirectorySize_Gadget, Index + 3, Text, 0, 3)
SetGadgetItemState(GetDirectorySize_Gadget, Index, #PB_Tree_Expanded)
EndIf
ForEach DirectorySize()
Size + DirectorySize()\Size
FileCounter + DirectorySize()\FileCounter
HideFileCounter + DirectorySize()\HideFileCounter
DirectoryCounter + DirectorySize()\DirectoryCounter
HideDirectoryCounter + DirectorySize()\HideDirectoryCounter
Next
SetGadgetItemText(GetDirectorySize_Gadget, 5, DisplaySize(Size))
If FileCounter > 1
Text = "Fichiers : "
Else
Text = "Fichier : "
EndIf
Text + Str(FileCounter)
If HideFileCounter > 1
Text + " [+" + Str(HideFileCounter) + " cachés]"
ElseIf HideFileCounter > 0
Text + " [+" + Str(HideFileCounter) + " caché]"
EndIf
SetGadgetItemText(GetDirectorySize_Gadget, 6, Text)
If DirectoryCounter > 1
Text = "Dossiers : "
Else
Text = "Dossier : "
EndIf
Text + Str(DirectoryCounter)
If HideDirectoryCounter > 1
Text + " [+" + Str(HideDirectoryCounter) + " cachés]"
ElseIf HideDirectoryCounter > 0
Text + " [+" + Str(HideDirectoryCounter) + " caché]"
EndIf
SetGadgetItemText(GetDirectorySize_Gadget, 7, Text)
EndIf
ChangeCurrentElement(DirectorySize(), *DirectorySize)
EndIf
EndProcedure
Procedure GetDirectorySize_Search(Directory.s, Index)
Protected SubDirectory.s, FileType.l
If Right(Directory, 1) <> "\"
Directory + "\"
EndIf
If ExamineDirectory(Index, Directory, "")
While NextDirectoryEntry(Index) And GetDirectorySize_Stop = 0
If DirectoryEntryType(Index) = #PB_DirectoryEntry_File
DirectorySize()\Size + DirectoryEntrySize(Index)
Attributs = DirectoryEntryAttributes(Index)
If Attributs & #PB_FileSystem_Hidden
DirectorySize()\HideFileCounter + 1
Else
DirectorySize()\FileCounter + 1
EndIf
GetDirectorySize_Display()
Else
SubDirectory.s = DirectoryEntryName(Index)
If SubDirectory <> "." And SubDirectory <> ".."
Attributs = DirectoryEntryAttributes(Index)
If Attributs & #PB_FileSystem_Hidden
DirectorySize()\HideDirectoryCounter + 1
Else
DirectorySize()\DirectoryCounter + 1
EndIf
GetDirectorySize_Search(Directory + SubDirectory, Index + 1)
EndIf
EndIf
Wend
FinishDirectory(Index)
EndIf
EndProcedure
Procedure GetDirectorySize_Thread(Parameter)
Protected NewList SubDirectory.s()
GetDirectorySize_Running = 1
If DirectorySize_IconSize = 0
DirectorySize_IconSize = ExtractIconFile("shell32.dll", 275, 16)
EndIf
If DirectorySize_IconDetail = 0
DirectorySize_IconDetail = ExtractIconFile("shell32.dll", 23, 16)
EndIf
If DirectorySize_Cursor_Wait = 0
DirectorySize_Cursor_Wait = LoadCursor_(0, #IDC_APPSTARTING)
EndIf
If DirectorySize_Cursor_Normal = 0
DirectorySize_Cursor_Normal = LoadCursor_(0, #IDC_ARROW)
EndIf
If GetProp_(GadgetID(GetDirectorySize_Gadget), "oldproc") = 0
SetProp_(GadgetID(GetDirectorySize_Gadget), "oldproc", SetWindowLongPtr_(GadgetID(GetDirectorySize_Gadget), #GWL_WNDPROC, @GetDirectorySize_SubClassProc()))
EndIf
SendMessage_(GadgetID(GetDirectorySize_Gadget), #WM_SETCURSOR , 0, 0)
AddElement(DirectorySize())
DirectorySize()\Name = DisplayName(DirectorySize_Directory)
DirectorySize()\Icon = GetIconFile(DirectorySize_Directory, 16)
AddGadgetItem(GetDirectorySize_Gadget, 0, DirectorySize()\Name, DirectorySize()\Icon, 0)
AddGadgetItem(GetDirectorySize_Gadget, 1, DisplaySize(0), DirectorySize_IconSize, 1)
AddGadgetItem(GetDirectorySize_Gadget, 2, "Fichier : ", 0, 1)
AddGadgetItem(GetDirectorySize_Gadget, 3, "Dossier : ", 0, 1)
SetGadgetItemState(GetDirectorySize_Gadget, 0, #PB_Tree_Expanded)
DirectorySize()\State = #DirectorySize_State_Start
GetDirectorySize_Display(1)
If ExamineDirectory(0, DirectorySize_Directory, "")
While NextDirectoryEntry(0) And GetDirectorySize_Stop = 0
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
DirectorySize()\Size + DirectoryEntrySize(0)
Attributs = DirectoryEntryAttributes(0)
If Attributs & #PB_FileSystem_Hidden
DirectorySize()\HideFileCounter + 1
Else
DirectorySize()\FileCounter + 1
EndIf
GetDirectorySize_Display()
Else
SubDirectory.s = DirectoryEntryName(0)
If SubDirectory <> "." And SubDirectory <> ".."
Attributs = DirectoryEntryAttributes(0)
If Attributs & #PB_FileSystem_Hidden
DirectorySize()\HideDirectoryCounter + 1
Else
DirectorySize()\DirectoryCounter + 1
EndIf
AddElement(SubDirectory())
SubDirectory() = SubDirectory
GetDirectorySize_Display()
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
DirectorySize()\State = #DirectorySize_State_Finish
GetDirectorySize_Display(1)
If ListSize(SubDirectory()) > 0
AddGadgetItem(GetDirectorySize_Gadget, 4, DirectorySize()\Name + " [Dossier + sous-dossier(s)]", DirectorySize()\Icon, 0)
AddGadgetItem(GetDirectorySize_Gadget, 5, DisplaySize(0), DirectorySize_IconSize, 1)
AddGadgetItem(GetDirectorySize_Gadget, 6, "Fichier : ", 0, 1)
AddGadgetItem(GetDirectorySize_Gadget, 7, "Dossier : ", 0, 1)
AddGadgetItem(GetDirectorySize_Gadget, 8, "Détails", DirectorySize_IconDetail, 1)
SetGadgetItemState(GetDirectorySize_Gadget, 4, #PB_Tree_Expanded)
SortList(SubDirectory(), #PB_Sort_Ascending | #PB_Sort_NoCase )
ForEach SubDirectory()
AddElement(DirectorySize())
DirectorySize()\Name = SubDirectory()
DirectorySize()\State = #DirectorySize_State_Start
GetDirectorySize_Search(DirectorySize_Directory + SubDirectory(), 1)
DirectorySize()\State = #DirectorySize_State_Finish
GetDirectorySize_Display(1)
Next
EndIf
GetDirectorySize_Stop = 2
GetDirectorySize_Running = 0
SendMessage_(GadgetID(GetDirectorySize_Gadget), #WM_SETCURSOR , 0, 0)
EndProcedure
Procedure GetDirectorySize(Directory.s)
GetDirectorySize_Stop = 0
If Right(Directory, 1) <> "\"
Directory + "\"
EndIf
DirectorySize_Directory = Directory
ForEach DirectorySize()
If DirectorySize()\Icon
DestroyIcon_(DirectorySize()\Icon)
EndIf
Next
ClearList(DirectorySize())
ClearGadgetItems(GetDirectorySize_Gadget)
CreateThread(@GetDirectorySize_Thread(), 0)
EndProcedure
If OpenWindow(0, 0, 0, 512, 512, "Taille d'un dossier", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
x = 4
y = 4
Largeur = 512 - 8
ButtonGadget(1, x, y, Largeur, 24, "Démarrer")
y + 24
ButtonGadget(2, x, y, Largeur, 24, "Arrêter")
DisableGadget(2, 1)
y + 24
GetDirectorySize_Gadget = TreeGadget(#PB_Any, x, y, Largeur, 300, #PB_Tree_AlwaysShowSelection | #PB_Tree_NoLines)
Repeat
Event = WaitWindowEvent(100)
If GetDirectorySize_Stop = 2
DisableGadget(1, 0)
DisableGadget(2, 1)
GetDirectorySize_Stop = 0
EndIf
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
DisableGadget(1, 1)
DisableGadget(2, 0)
Dossier.s = PathRequester("Taille du dossier", "C:\")
If FileSize(Dossier) = -2
GetDirectorySize(Dossier)
EndIf
Case 2
GetDirectorySize_Stop = 1
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
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: Taille d'un dossier
Bonne idée,
par contre, je lance en mod debug, le comptage se fait, le curseur change, mais dès qu'il a terminé le listage, je vois une ligne rouge apparaitre dans le debug puis le programme se ferme, pas le temps de lire le message.
par contre, je lance en mod debug, le comptage se fait, le curseur change, mais dès qu'il a terminé le listage, je vois une ligne rouge apparaitre dans le debug puis le programme se ferme, pas le temps de lire le message.
~~~~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
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Taille d'un dossier
Je n'arrive pas a reproduire, aucun bug chez moi ...
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: Taille d'un dossier
Jacobus a écrit :T'as un proco à jambe de bois ou quoi ?! 2min... y doit être suisse.
Le code n'est pas de moi mais de LSI. Je n'ai fais que rajouter une progressbar. En fait là on ne calcule pas QUE la taille d'un dossier.



Mais il est normal que compter autant de fichiers prenne autant de temps ! (Et puis c'est pas le processeur qui est en cause là ! C'est plutôt le disque dur.
Windows met carrément le même temps que le code de LSI pour fournir l'affichage des propriétés !
Pour info mon proc :
Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50Ghz 2.50GHz
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Taille d'un dossier
Bin c'est pas si mal déjà 

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
Re: Taille d'un dossier
J'ai retesté, c'est avec le debug qu'il plante. A la fin j'ai le message windows "purebasicX.exe a cessé de fonctionner blablabla"Le Soldat Inconnu a écrit :Je n'arrive pas a reproduire, aucun bug chez moi ...
~~~~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
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Taille d'un dossier
En pB x64 ou x32 ?
Moi je suis en x32 et ça ne plante pas avec le debugger
Moi je suis en x32 et ça ne plante pas avec le debugger
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: Taille d'un dossier
En PB x32 pourtant
~~~~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