Información de Directorios
Fecha: 21/Ago/97
Autor: Francisco Bonet
From: "Francisco Bonet"
<[email protected]>
Subject: Función para calcular tamaño total de un directorio
con VB4
Date sent: Thu, 31 Jul 1997 00:14:02 +0200
Hola Guille,
En mis E-mails de 26 y 27 de julio recordarás que te pedía
ayuda para
escribir una función que calculara el tamaño total de un
directorio,
incluído nº subdirectorios, nº de archivos, etc.
Te comenté que si salía algo bueno te lo mandaría. Aquí lo
tienes para, si
lo crees de interés, incluirlo en tus páginas.
Como verás no utilizo OCX ni clases, simplemente una función.
Te mando un Zip con un pequeño programa demostrativo (que si
quieres puedes
ofrecerlo) para que pruebes la función.
Parte del programa está en catalán, puesto que un servidor es
mallorquín.
Supongo que esto no ofrecerá ninguna dificultad. Si alguien no
lo entiende,
gustosamente se lo traduciré.
Saludos,
Francisco Bonet
'//Se debe declarar del API 32:
'//funciones: FindFirstFile, FindNextFile y FindClose
'//types: FILETIME y WIN32_FIND_DATA
'//constantes: Const MAX_PATH = 64 y Public Const
'//FILE_ATTRIBUTE_DIRECTORY = &H10
'//Asimismo las variables TotSize, NumSubdirs y NumArxius deben ser del
tipo Long '//y declarase como globales
'--------------------------------------------------------------------
Private Function InfoSubdirs(miPath As String) As Long
'Part d'aquest codi ha estat possible gràcies a la
'informació obtinguda de Bjorn Larsen
'Francisco Bonet, juliol de 1977
'-------------------------------------------------
Dim valor1 As Long, valor2 As Long, atribarx As Long
Dim inull As Integer
Dim NomArxiu As String, NomSdir As String, NouPath As String, NouCalcul As
String
Dim InfoTd As WIN32_FIND_DATA
On Error Resume Next
If Right$(miPath, 1) <> "\" Then miPath = miPath & "\"
valor1 = 0
valor2 = 1
valor1 = FindFirstFile(miPath & "*.*", InfoTd)
Do
NomArxiu = RTrim$(InfoTd.cFileName)
atribarx = InfoTd.dwFileAttributes
If Left(NomArxiu, 1) <> "." Then
If atribarx And FILE_ATTRIBUTE_DIRECTORY Then
NomSdir = NomSdir & miPath & NomArxiu
NumSubdirs = NumSubdirs + 1
Else
NumArxius = NumArxius + 1
TotSize = TotSize + InfoTd.nFileSizeLow
End If
End If
InfoTd.cFileName = ""
valor2 = FindNextFile(valor1, InfoTd)
Loop Until valor2 = 0
FindClose (valor1)
'RECURSSIO
Do Until NomSdir = ""
inull = InStr(NomSdir, vbNullChar)
If inull Then
NouPath = Left$(NomSdir, inull - 1)
End If
NomSdir = Right$(NomSdir, Len(NomSdir) - inull%)
NouCalcul = InfoSubdirs(NouPath)
Loop
End Function
Si quieres bajar el listado con los ejemplos, pulsa este link. (DirSizeFB.zip 3.41 KB)