Une autre version qui donne également le nombre de dossiers et fichiers cachés
Version qui utilise ma librairie GetIcon (la version sans librairie est plus bas)
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
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
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 = GetSmallIconFile(DirectorySize_Directory + DirectorySize()\Name)
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()
If DirectorySize_IconSize = 0
DirectorySize_IconSize = ExtractIconFile("shell32.dll", 275, 16)
EndIf
If DirectorySize_IconDetail = 0
DirectorySize_IconDetail = ExtractIconFile("shell32.dll", 23, 16)
EndIf
AddElement(DirectorySize())
DirectorySize()\Name = DisplayName(DirectorySize_Directory)
DirectorySize()\Icon = GetSmallIconFile(DirectorySize_Directory)
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
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
Version sans librairies
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
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
EndStructure
Global NewList DirectorySize.DirectorySizeInformation()
Global GetDirectorySize_Stop.i, DirectorySize_Directory.s, GetDirectorySize_Gadget.i
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()\Name = DisplayName(DirectorySize_Directory + DirectorySize()\Name)
Index = CountGadgetItems(GetDirectorySize_Gadget)
AddGadgetItem(GetDirectorySize_Gadget, Index, DirectorySize()\Name, 0, 2)
AddGadgetItem(GetDirectorySize_Gadget, Index + 1, DisplaySize(DirectorySize()\Size), 0, 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()
AddElement(DirectorySize())
DirectorySize()\Name = DisplayName(DirectorySize_Directory)
AddGadgetItem(GetDirectorySize_Gadget, 0, DirectorySize()\Name, 0, 0)
AddGadgetItem(GetDirectorySize_Gadget, 1, DisplaySize(0), 0, 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)]", 0, 0)
AddGadgetItem(GetDirectorySize_Gadget, 5, DisplaySize(0), 0, 1)
AddGadgetItem(GetDirectorySize_Gadget, 6, "Fichier : ", 0, 1)
AddGadgetItem(GetDirectorySize_Gadget, 7, "Dossier : ", 0, 1)
AddGadgetItem(GetDirectorySize_Gadget, 8, "Détails", 0, 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
EndProcedure
Procedure GetDirectorySize(Directory.s)
GetDirectorySize_Stop = 0
If Right(Directory, 1) <> "\"
Directory + "\"
EndIf
DirectorySize_Directory = Directory
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)]