Gå til innhold

Hvordan hente mappe størrelse via DirectoryInfo


Anbefalte innlegg

Videoannonse
Annonse

Det kan gjøres mye enklere da som f.eks.:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
	Dim fso As Object, path As String, minMappe As Object
	fso = CreateObject("scripting.filesystemobject")
	'tast inn mappeadressa som f.eks. c:\Program Files
	path = TextBox1.Text
	If fso.FolderExists(path) Then
		minMappe = fso.GetFolder(path)
		Label1.Text = (minMappe.size)
		Label1.Text = path & ", Size = " & Label1.Text & " bytes"
	Else
		Label1.Text = "Mappa " & path & " eksisterer ikke!"
	End If
End Sub

Lenke til kommentar

Public Function GetFolderSize(ByVal folder As String) As Long
 Return GetFolderSize(New DirectoryInfo(folder))
End Function

Public Function GetFolderSize(ByVal folder As DirectoryInfo) As Long
 Dim ret As Long = 0
 Dim files As FileInfo()
 Dim dirs As DirectoryInfo()

 ' Hent filstørrelse på alle filer i mappen
 files = folder.GetFiles()
 For Each file As FileInfo In files
ret += file.Length
 Next

 ' Rekurser gjennom alle undermapper
 dirs = folder.GetDirectories()
 For Each dir As DirectoryInfo In dirs
ret += GetFolderSize(dir)
 Next

 Return ret
End Function

Denne returnerer størrelsen på alle filer i antall byte.

Lenke til kommentar

Rekursiv funksjon er vel strengt tatt unødvendig; det holder å angi riktig searchoption:

 

Public Function GetFolderSize(ByVal folder As String) As Long
	Return GetFolderSize(New DirectoryInfo(folder))
End Function

Public Function GetFolderSize(ByVal folder As DirectoryInfo) As Long
	Dim ret As Long = 0
	Dim files As FileInfo()
	Dim dirs As DirectoryInfo()

	' Hent filstørrelse på alle filer i mappen og undermapper
	files = folder.GetFiles("*", SearchOption.AllDirectories)
	For Each file As FileInfo In files
		ret += file.Length
	Next

	Return ret
End Function

Lenke til kommentar
Rekursiv funksjon er vel strengt tatt unødvendig; det holder å angi riktig searchoption:

 

Public Function GetFolderSize(ByVal folder As String) As Long
	Return GetFolderSize(New DirectoryInfo(folder))
End Function

Public Function GetFolderSize(ByVal folder As DirectoryInfo) As Long
	Dim ret As Long = 0
	Dim files As FileInfo()
	Dim dirs As DirectoryInfo()

	' Hent filstørrelse på alle filer i mappen og undermapper
	files = folder.GetFiles("*", SearchOption.AllDirectories)
	For Each file As FileInfo In files
		ret += file.Length
	Next

	Return ret
End Function

 

Hei.

Takk for svar.

 

Får at det ikke skulle komme feilmeldinger måtte jeg legge til IO. forran DirectoryInfo og FileInfo, men de tingene her gjør jo ingen verdens ting. Må jeg linke en knapp til dette eller hvordan fungerer dette?

Lenke til kommentar

Her er koden jeg bruker:

 

Public Function GetFolderSize(ByVal folder As String) As Long
	Return GetFolderSize(New IO.DirectoryInfo(folder))
End Function

Public Function GetFolderSize(ByVal folder As IO.DirectoryInfo) As Long
	Dim ret As Long = 0
	Dim files As IO.FileInfo()
	'Dim dirs As IO.DirectoryInfo()

	' Hent filstørrelse på alle filer i mappen og undermapper
	files = folder.GetFiles("*", IO.SearchOption.AllDirectories)
	For Each file As IO.FileInfo In files
		ret += file.Length
	Next

	Return ret
End Function

 

Altså det jeg mener er når denne koden er lagt til å programmet så blir den ikke kjørt. Programmet bryr seg ikke om at koden ligger der. Må jeg opprette en knapp på formen og akrivere koden ved button1.click? Og hvordan gjør jeg det?

Regner ikke med at ting fungerer av seg selv! :p

Lenke til kommentar
Det er lov til å gjøre et forsøk, og kanskje ikke bare regne med at alle skal skrive koden til deg!

 

Jeg har ikke regnet med at dere skal skrive koden for meg. Men jeg spurte etter et eksempel på hvordan å få noe sånt til å kjøre forde jeg aldri har vært borti å lage egne public functions. Har frem til nå bare brukt privat sub objekt.Action subs.

 

Takk for hjelpen. Jeg har nå klart å få frem størrelsen på filene i mappen! :thumbup:

Lenke til kommentar
  • 3 uker senere...

Når jeg f.eks velger at programmet skal sjekke størrelsen på en hel diskstasjon(C:\) så kommer den opp med en feilmelding hvor det står: 'Ingen tilgang til banen C:\etellerannet'. Denne feilmeldingen kommer opp når programmet prøver å legge filene inn i et IO.FileInfo() objekt. Så da må jeg vel få programmet på en måte til å ikke ta med de filene den ikke kan lese. Regner med at dette gjøres med kommandoen IsReadOnly?

Men hvordan skal jeg få sjekket igjennom filene om de er readonly før de legges til i IO.FileInfo() objektet?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...