Page 1 sur 2

Taille d'un dossier

Publié : mer. 04/mai/2011 22:13
par Le Soldat Inconnu
Salut,

un petit code pour obtenir la taille d'un dossier, rien d'extraordinaire à la base.

J'ai surtout travaillé ce code pour qu'il fonctionne dans un thread avec affichage de la taille du dossier qui évolue avec l'analyse.

Donc on peut lancer et arrêter l'analyse de la taille des dossiers avec 2 boutons.
L'affichage est rafraichit toutes les 200ms pour ne pas pénaliser l'analyse.

si vous avez une bonne idée pour afficher une icône qui tourne pendant l'analyse de la taille du dossier au lieu des "..." et sans passer par un imagegadget qu'on rafraichit avec une nouvelle image toutes les x ms, je suis preneur.

Code : Tout sélectionner

Procedure.s DisplaySize(Taille.q, Unite.l = -1, NbDecimals.l = 0)
	; Taille = taille du lecteur
	; Unite = 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 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

Global DirectorySize_Stop.i, DirectorySize.q, FullDirectorySize.q, DirectoryCounter.q, DirectoryFileCounter.q, FullDirectoryCounter.q, FullDirectoryFileCounter.q, DirectorySize_Directory.s, DirectoryProgress.i, FullDirectoryProgress.i
Procedure DirectorySize_Display(Finish = 0)
	Static Time.i, ProgressBarDirectory.s, ProgressBarFullDirectory.s
	ActualTime = ElapsedMilliseconds()
	If Time = 0 Or ActualTime - Time > 200 Or Finish
		Time = ActualTime
		
		If DirectoryProgress
			Select ProgressBarDirectory
				Case ""
					ProgressBarDirectory = " ."
				Case " ."
					ProgressBarDirectory = " .."
				Case " .."
					ProgressBarDirectory = " ..."
				Case " ..."
					ProgressBarDirectory = ""
			EndSelect
		Else
			ProgressBarDirectory = ""
		EndIf
		
		If FullDirectoryProgress
			Select ProgressBarFullDirectory
				Case ""
					ProgressBarFullDirectory = " ."
				Case " ."
					ProgressBarFullDirectory = " .."
				Case " .."
					ProgressBarFullDirectory = " ..."
				Case " ..."
					ProgressBarFullDirectory = ""
			EndSelect
		Else
			ProgressBarFullDirectory = ""
		EndIf
		
		
		SetGadgetText(10, Str(DirectoryFileCounter) + ProgressBarDirectory)
		SetGadgetText(11, Str(DirectoryCounter) + ProgressBarDirectory)
		SetGadgetText(12, DisplaySize(DirectorySize) + ProgressBarDirectory)
		
		
		SetGadgetText(13, Str(FullDirectoryFileCounter) + ProgressBarFullDirectory)
		SetGadgetText(14, Str(FullDirectoryCounter) + ProgressBarFullDirectory)
		SetGadgetText(15, DisplaySize(FullDirectorySize) + ProgressBarFullDirectory)
		
	EndIf
EndProcedure
Procedure DirectorySize_Search(Directory.s, Index)
  Protected SubDirectory.s, FileType.l
  
  If Right(Directory, 1) <> "\"
    Directory + "\"
	EndIf
  
  If ExamineDirectory(Index, Directory, "")
    While NextDirectoryEntry(Index) And DirectorySize_Stop = 0
			
      If DirectoryEntryType(Index) = #PB_DirectoryEntry_File
        FullDirectorySize + DirectoryEntrySize(Index)
				FullDirectoryFileCounter + 1
				DirectorySize_Display()
			Else
        SubDirectory.s = DirectoryEntryName(Index)
        If SubDirectory <> "." And SubDirectory <> ".."
					FullDirectoryCounter + 1
          DirectorySize_Search(Directory + SubDirectory, Index + 1)
				EndIf
			EndIf
      
		Wend
    FinishDirectory(Index)
	EndIf
	
EndProcedure
Procedure DirectorySize_Thread(Parameter)
	Protected Directory.s
	Directory = DirectorySize_Directory
	
	If ExamineDirectory(0, Directory, "")
    While NextDirectoryEntry(0) And DirectorySize_Stop = 0
			
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        DirectorySize + DirectoryEntrySize(0)
				FullDirectorySize = DirectorySize
				DirectoryFileCounter + 1
				FullDirectoryFileCounter + 1
				DirectorySize_Display()
			Else
				SubDirectory.s = DirectoryEntryName(0)
        If SubDirectory <> "." And SubDirectory <> ".."
          DirectoryCounter + 1
					FullDirectoryCounter + 1
					DirectorySize_Display()
				EndIf
			EndIf
      
		Wend
    FinishDirectory(0)
	EndIf
	
	DirectoryProgress = 0
	
	If ExamineDirectory(0, Directory, "")
    While NextDirectoryEntry(0) And DirectorySize_Stop = 0
			
      If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
        SubDirectory.s = DirectoryEntryName(0)
        If SubDirectory <> "." And SubDirectory <> ".."
          DirectorySize_Search(Directory + SubDirectory, 1)
				EndIf
			EndIf
      
		Wend
    FinishDirectory(0)
	EndIf
	
	FullDirectoryProgress = 0
	
	DirectorySize_Display(1)
	DirectorySize_Stop = 2
	
EndProcedure
Procedure DirectorySize(Directory.s)
	
	DirectorySize_Stop = 0
	DirectorySize = 0
	FullDirectorySize = 0
	DirectoryCounter = 0
	DirectoryFileCounter = 0
	FullDirectoryCounter = 0
	FullDirectoryFileCounter = 0
	DirectorySize_Directory = Directory
	DirectoryProgress = 1
	FullDirectoryProgress = 1
	
	CreateThread(@DirectorySize_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
	TextGadget(#PB_Any, x, y, Largeur, 16, "Nombre de fichier :")
	y + 16
	TextGadget(10, x, y, Largeur, 16, "")
	y + 16
	TextGadget(#PB_Any, x, y, Largeur, 16, "Nombre de dossier :")
	y + 16
	TextGadget(11, x, y, Largeur, 16, "")
	y + 16
	TextGadget(#PB_Any, x, y, Largeur, 16, "Taille des fichiers :")
	y + 16
	TextGadget(12, x, y, Largeur, 16, "")
	y + 16
	TextGadget(#PB_Any, x, y, Largeur, 16, "Nombre de fichier dans le dossier et les sous-dossiers:")
	y + 16
	TextGadget(13, x, y, Largeur, 16, "")
	y + 16
	TextGadget(#PB_Any, x, y, Largeur, 16, "Nombre de dossier et sous-dossier :")
	y + 16
	TextGadget(14, x, y, Largeur, 16, "")
	y + 16
	TextGadget(#PB_Any, x, y, Largeur, 16, "Taille du dossier :")
	y + 16
	TextGadget(15, x, y, Largeur, 16, "")
	y + 16
	
	Repeat
		Event = WaitWindowEvent(100)
		
		If DirectorySize_Stop = 2
			DisableGadget(1, 0)
			DisableGadget(2, 1)
			DirectorySize_Stop = 0
		EndIf
		
		Select Event
			Case #PB_Event_Gadget
				Select EventGadget()
					Case 1
						DisableGadget(1, 1)
						DisableGadget(2, 0)
						DirectorySize("C:\")
					Case 2
						DirectorySize_Stop = 1
				EndSelect
		EndSelect
		
	Until Event = #PB_Event_CloseWindow
	
	
EndIf


Re: Taille d'un dossier

Publié : jeu. 05/mai/2011 8:10
par Kwai chang caine
Marche niquel, merci 8)

Re: Taille d'un dossier

Publié : jeu. 05/mai/2011 15:21
par Ar-S
si vous avez une bonne idée pour afficher une icône qui tourne pendant l'analyse de la taille du dossier au lieu des "..."
Merci ça sera utile.
Pourquoi ne pas mettre une trackbar plutôt qu'une image ?

Re: Taille d'un dossier

Publié : jeu. 05/mai/2011 18:20
par Le Soldat Inconnu
une progressbar n'est pas viable car pour avoir un barre de progression qui évolue, il savoir combien de fichier il a au maximum pour faire évoluer de 0 à 100%
mais c'est justement cette analyse du nombre de fichier et de leur taille qui est faite.


voici une autre version, sur le même principe mais avec une présentation différente :
Il faut ma librairie GetIcon

Code : Tout sélectionner

Procedure.s DisplaySize(Taille.q, Unite.l = -1, NbDecimals.l = 0)
	; Taille = taille du lecteur
	; Unite = 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 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
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
	DirectoryCounter.q
	State.i
	Icon.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
	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, "Fichier(s) : " + Str(DirectorySize()\FileCounter) + " [" + DisplaySize(DirectorySize()\Size) + "]")
			SetGadgetItemText(GetDirectorySize_Gadget, 2, "Dossier(s) : " + Str(DirectorySize()\DirectoryCounter))
		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, "Fichier(s) : " + Str(DirectorySize()\FileCounter) + " [" + DisplaySize(DirectorySize()\Size) + "]", 0, 3)
				AddGadgetItem(GetDirectorySize_Gadget, Index + 2, "Dossier(s) : " + Str(DirectorySize()\DirectoryCounter), 0, 3)
				SetGadgetItemState(GetDirectorySize_Gadget, Index, #PB_Tree_Expanded)
			EndIf
			
			ForEach DirectorySize()
				Size + DirectorySize()\Size
				FileCounter + DirectorySize()\FileCounter
				DirectoryCounter + DirectorySize()\DirectoryCounter
			Next
			
			SetGadgetItemText(GetDirectorySize_Gadget, 4, "Fichier(s) : " + Str(FileCounter) + " [" + DisplaySize(Size) + "]")
			SetGadgetItemText(GetDirectorySize_Gadget, 5, "Sous-dossier(s) : " + Str(DirectoryCounter))
		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)
				DirectorySize()\FileCounter + 1
				GetDirectorySize_Display()
			Else
        SubDirectory.s = DirectoryEntryName(Index)
        If SubDirectory <> "." And SubDirectory <> ".."
					DirectorySize()\DirectoryCounter + 1
          GetDirectorySize_Search(Directory + SubDirectory, Index + 1)
				EndIf
			EndIf
      
		Wend
    FinishDirectory(Index)
	EndIf
	
EndProcedure
Procedure GetDirectorySize_Thread(Parameter)
	Protected Directory.s
	Protected NewList SubDirectory.s()
	Directory = DirectorySize_Directory
	
	AddElement(DirectorySize())
	DirectorySize()\Name = DisplayName(Directory)
	DirectorySize()\Icon = GetSmallIconFile(Directory)
	AddGadgetItem(GetDirectorySize_Gadget, 0, DirectorySize()\Name, DirectorySize()\Icon, 0)
	AddGadgetItem(GetDirectorySize_Gadget, 1, "Fichier(s) : " + "0" + " [" + DisplaySize(0) + "]", 0, 1)
	AddGadgetItem(GetDirectorySize_Gadget, 2, "Dossier(s) : " + "0", 0, 1)
	SetGadgetItemState(GetDirectorySize_Gadget, 0, #PB_Tree_Expanded)
	
	DirectorySize()\State = #DirectorySize_State_Start
	
	GetDirectorySize_Display(1)
	
	If ExamineDirectory(0, Directory, "")
    While NextDirectoryEntry(0) And GetDirectorySize_Stop = 0
			
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        DirectorySize()\Size + DirectoryEntrySize(0)
				DirectorySize()\FileCounter + 1
				GetDirectorySize_Display()
			Else
				SubDirectory.s = DirectoryEntryName(0)
        If SubDirectory <> "." And SubDirectory <> ".."
          DirectorySize()\DirectoryCounter + 1
					AddElement(SubDirectory())
					SubDirectory() = SubDirectory
					GetDirectorySize_Display()
				EndIf
			EndIf
      
		Wend
    FinishDirectory(0)
	EndIf
	
	If ListSize(SubDirectory()) > 0
		AddGadgetItem(GetDirectorySize_Gadget, 3, DirectorySize()\Name + " [Dossier + sous-dossier(s)]", DirectorySize()\Icon, 0)
		AddGadgetItem(GetDirectorySize_Gadget, 4, "Fichier(s) : " + "0" + " [" + DisplaySize(0) + "]", 0, 1)
		AddGadgetItem(GetDirectorySize_Gadget, 5, "Dossier(s) : " + "0", 0, 1)
		AddGadgetItem(GetDirectorySize_Gadget, 6, "Détails", 0, 1)
		SetGadgetItemState(GetDirectorySize_Gadget, 3, #PB_Tree_Expanded)
		
		SortList(SubDirectory(), #PB_Sort_Ascending | #PB_Sort_NoCase )
		DirectorySize()\State = #DirectorySize_State_Finish
		GetDirectorySize_Display(1)
		
		ForEach SubDirectory()
			AddElement(DirectorySize())
			DirectorySize()\Name = SubDirectory()
			DirectorySize()\State = #DirectorySize_State_Start
			GetDirectorySize_Search(Directory + SubDirectory(), 1)
			DirectorySize()\State = #DirectorySize_State_Finish
			GetDirectorySize_Display(1)
		Next
	EndIf
	
	GetDirectorySize_Stop = 2
	
EndProcedure
Procedure GetDirectorySize(Directory.s)
	Static Icon.i
	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)
						GetDirectorySize("C:\")
					Case 2
						GetDirectorySize_Stop = 1
				EndSelect
		EndSelect
		
	Until Event = #PB_Event_CloseWindow
	
	
EndIf


Re: Taille d'un dossier

Publié : sam. 07/mai/2011 10:55
par Le Soldat Inconnu
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


Re: Taille d'un dossier

Publié : sam. 07/mai/2011 11:22
par Backup
si! avec progress bar c'est possible
il te suffit de faire en premier tourner ton algo
avec le minimum (juste compter les fichiers)

ensuite tu aura ton nombre Maxi qui te servira alors pour la progress bar
de L'algo complet (taille des fichiers,Dossier etc ...)

si tu ne fait tourner qu'un algo de compte de fichier, tu vas etre surpris de la rapidité
ce sera completement transparent pour le prg dans son ensemble :)
(je faisai comme ça pour mon prg de Backup)

Code : Tout sélectionner


Procedure.s ParseDirectory_nbr_file(folder.s, id.l = 0) 
    ;By Dobro
  If Right(folder, 1) <> "\"
    folder + "\"
  EndIf
  If ExamineDirectory(id, folder, "*.*")
    While NextDirectoryEntry(id)
      If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
        ;##########################################
        Debug folder + DirectoryEntryName(id)
        nombre_file.d=nombre_file.d+1 
        ;##########################################
        If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
          ParseDirectory_nbr_file(folder + DirectoryEntryName(id), id + 1)
        EndIf
      EndIf
    Wend
    FinishDirectory(id)
  EndIf
EndProcedure

Re: Taille d'un dossier

Publié : dim. 08/mai/2011 11:38
par Le Soldat Inconnu
Je ne suis pas du tout d'accord avec toi, Dobro.

Le code suivant qui ne fais que compter les fichiers prends plus de 44s.
Puis on a un phénomène de cache. Quand on le relance, le temps descend à 2.8s

Donc je maintiens que le coup de la barre de progression n'est pas possible sur ce genre de code :mrgreen:

Code : Tout sélectionner

Global Compteur

Procedure RechercheFichier(Dossier.s, Index = 0)
  Protected Fichier.s, SousDossier.s, FileType.l
  
  If Right(Dossier, 1) <> "\"
    Dossier + "\"
  EndIf
  
  If ExamineDirectory(Index, Dossier, "")
    While NextDirectoryEntry(Index)

      If DirectoryEntryType(Index) = #PB_DirectoryEntry_File
        Compteur + 1
      Else
        SousDossier.s = DirectoryEntryName(Index)
        If SousDossier <> "." And SousDossier <> ".."
          RechercheFichier(Dossier + SousDossier, Index + 1)
        EndIf
      EndIf
      
    Wend
    FinishDirectory(Index)
  EndIf
   
EndProcedure


Temps1 = ElapsedMilliseconds()
RechercheFichier("C:\")
Temps2 = ElapsedMilliseconds()

MessageRequester("ExamineDirectory", Str(Compteur) + " Fichiers" + Chr(10) + Str(Temps2 - Temps1) + " ms")

Re: Taille d'un dossier

Publié : sam. 14/mai/2011 11:42
par Le Soldat Inconnu
j'ai corrigé un petite boulette dans le code :mrgreen:

Re: Taille d'un dossier

Publié : sam. 14/mai/2011 13:02
par dayvid
Bonjour LSI

Merci de ton partage :P
j'ai corrigé un petite boulette dans le code
J'ai lue tous t'es messages ici et tu as du mal avec les "une" :mrgreen:

Ce n'est pas méchant je te rassure, au contraire même
juste histoire de te taquiner un peut voilà tous :wink:

Re: Taille d'un dossier

Publié : mar. 17/mai/2011 11:04
par Kwai chang caine
dayvid a écrit :Bonjour LSI
Merci de ton partage :P
j'ai corrigé un petite boulette dans le code
J'ai lue tous t'es messages ici et tu as du mal avec les "une" :mrgreen:
Ce n'est pas méchant je te rassure, au contraire même
juste histoire de te taquiner un peut voilà tous :wink:
Eeeeeh l'ami..tu crois pas que si y'a un sujet ou tu devrais la mettre en mode doux, c'est bien celui de l'orthographe :lol:
Meme pour taquiner...tu manques pas d'air :?

Re: Taille d'un dossier

Publié : mar. 17/mai/2011 13:03
par Chris
Kwai chang caine a écrit :
dayvid a écrit :Bonjour LSI
Merci de ton partage :P
j'ai corrigé un petite boulette dans le code
J'ai lue tous t'es messages ici et tu as du mal avec les "une" :mrgreen:
Ce n'est pas méchant je te rassure, au contraire même
juste histoire de te taquiner un peut voilà tous :wink:
Eeeeeh l'ami..tu crois pas que si y'a un sujet ou tu devrais la mettre en mode doux, c'est bien celui de l'orthographe :lol:
Meme pour taquiner...tu manques pas d'air :?
C'est exactement ce que j'ai pensé, mais j'ai rien voulu dire.
On aurait encore dit que je m'acharne et que je suis agressif... Mais bon!

Faut s'étonner de rien de la part d'un type qui voulait coder un "correcteur d'orthographe"...
... alors qu'il n'en a même pas les bases! :mrgreen:

Re: Taille d'un dossier

Publié : mar. 17/mai/2011 18:22
par Jacobus
En persistant sur l'idée de Dobro, on peut ajouter une barre de progression pour faire patienter le client.
Pour ma part le comptage de ~250 000 fichiers prend 5 sec en mode debug, temps très acceptable pour une analyse de répertoire.
Après on utilise le nombre de fichiers trouvés pour actualiser la progression, et ça fonctionne relativement bien...
Ton code avec ajout de barre de progression LSI, (j'avoue que je n'avais jamais pensé à faire un tel tri dans un dossier et que c'est très pratique finalement, merci!)

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
		
		#progbar
		#TextCurrentProcess
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
Global valprogress.i = 100, Compteur.i = 0, progress.i = 0
Procedure Progression(progress)  
  pfiles.f = progress/Compteur*100 
  SetGadgetState(#progbar,pfiles) 
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()\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
								  progress = progress+1 : Progression(progress)
								Else
								  DirectorySize()\FileCounter + 1
								  progress = progress+1 : Progression(progress)
								EndIf
								GetDirectorySize_Display()
						Else
				SubDirectory.s = DirectoryEntryName(Index)
				If SubDirectory <> "." And SubDirectory <> ".."
										Attributs = DirectoryEntryAttributes(Index)
										If Attributs & #PB_FileSystem_Hidden
										  DirectorySize()\HideDirectoryCounter + 1
										  progress = progress+1 : Progression(progress)
										Else
										  DirectorySize()\DirectoryCounter + 1
										  progress = progress+1 : Progression(progress)
										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
								  progress = progress+1 : Progression(progress)
								Else
								  DirectorySize()\FileCounter + 1
								  progress = progress+1 : Progression(progress)
								EndIf
								GetDirectorySize_Display()
						Else
								SubDirectory.s = DirectoryEntryName(0)
				If SubDirectory <> "." And SubDirectory <> ".."
										Attributs = DirectoryEntryAttributes(0)
										If Attributs & #PB_FileSystem_Hidden
										  DirectorySize()\HideDirectoryCounter + 1
										  progress = progress+1 : Progression(progress)
										Else
										  DirectorySize()\DirectoryCounter + 1
										  progress = progress+1 : Progression(progress)
										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
		SetGadgetText(#TextCurrentProcess,"Analyse terminée!")
		valprogress = 0
		SetGadgetState(#progbar,valprogress)
EndProcedure
Procedure Get_DirectorySize(Directory.s)
		GetDirectorySize_Stop = 0
		
		If Right(Directory, 1) <> "\"
		Directory + "\"
		EndIf
		DirectorySize_Directory = Directory
		
		ClearList(DirectorySize())
		ClearGadgetItems(GetDirectorySize_Gadget)
		
		CreateThread(@GetDirectorySize_Thread(), 0)
		
EndProcedure
Procedure RechercheFichier(Dossier.s, Index = 0)
	Protected Fichier.s, SousDossier.s, FileType.l
	
	If Right(Dossier, 1) <> "\"
		Dossier + "\"
	EndIf
	
	If ExamineDirectory(Index, Dossier, "")
		While NextDirectoryEntry(Index)

			If DirectoryEntryType(Index) = #PB_DirectoryEntry_File
				Compteur + 1
			Else
				SousDossier.s = DirectoryEntryName(Index)
				If SousDossier <> "." And SousDossier <> ".."
					RechercheFichier(Dossier + SousDossier, Index + 1)
				EndIf
			EndIf
			
		Wend
		FinishDirectory(Index)
	EndIf
		
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)
		
		ProgressBarGadget(#progbar, x, y+GadgetHeight(GetDirectorySize_Gadget), Largeur, 20, 0, valprogress)
		TextGadget(#TextCurrentProcess, x, y+GadgetHeight(GetDirectorySize_Gadget)+30, Largeur, 15,"")
		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											  
												  Compteur = 0 : progress = 0
												  SetGadgetText(#TextCurrentProcess,"Paramètrage en cours...")
												  RechercheFichier(Dossier)
												  SetGadgetText(#TextCurrentProcess,Str(Compteur) + " Fichiers trouvés dans ce dossier.")
												  valprogress = Compteur
												  Get_DirectorySize(Dossier)
												EndIf
										Case 2
												GetDirectorySize_Stop = 1
								EndSelect
				EndSelect
				
		Until Event = #PB_Event_CloseWindow
		
		
EndIf



Re: Taille d'un dossier

Publié : mer. 18/mai/2011 3:34
par Ar-S
Excellent !

Re: Taille d'un dossier

Publié : mer. 18/mai/2011 13:40
par dayvid
La meilleur arme qui soit contre l'attaquie est la fuite :wink:

Re: Taille d'un dossier

Publié : mer. 18/mai/2011 14:02
par Mindphazer
dayvid a écrit :La meilleur arme qui soit contre l'attaquie est la fuite :wink:
:?: :?: :?: