PDA

View Full Version : gestione cartelle con vb6


Joblack84
19-06-2006, 15:28
Mi servirebbe sapere come poter calcolare il numero di file presenti in una cartella tramite vb6

mynos79
19-06-2006, 15:47
In un modulo inserisci questo codice:

Public Const MAX_PATH = 260
Public Const INVALID_HANDLE_VALUE = -1
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal _
lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal _
hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Public Function NumFiles(sPath As String) As Long
Dim f As WIN32_FIND_DATA
Dim hFile As Long
NumFiles = 0
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sPath = sPath & "*.*"
hFile = FindFirstFile(sPath, f)
If hFile = INVALID_HANDLE_VALUE Then Exit Function
If (f.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then NumFiles = 1
Do While FindNextFile(hFile, f)
If (f.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then NumFiles = _
NumFiles + 1
Loop
FindClose (hFile)
End Function

Nel form, invece, per richiamare la funzione basta questo codice:

NumFiles(nomedirectory)
' es: NumFiles("c:\temp")

La funzione NumFiles restituisce un Long e non esamina i file presenti in eventuali sottodirectory (modifica peraltro non difficile usando sempre FIleSystemObject).

Joblack84
19-06-2006, 16:31
In un modulo inserisci questo codice:

Public Const MAX_PATH = 260
Public Const INVALID_HANDLE_VALUE = -1
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal _
lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal _
hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Public Function NumFiles(sPath As String) As Long
Dim f As WIN32_FIND_DATA
Dim hFile As Long
NumFiles = 0
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sPath = sPath & "*.*"
hFile = FindFirstFile(sPath, f)
If hFile = INVALID_HANDLE_VALUE Then Exit Function
If (f.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then NumFiles = 1
Do While FindNextFile(hFile, f)
If (f.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then NumFiles = _
NumFiles + 1
Loop
FindClose (hFile)
End Function

Nel form, invece, per richiamare la funzione basta questo codice:

NumFiles(nomedirectory)
' es: NumFiles("c:\temp")

La funzione NumFiles restituisce un Long e non esamina i file presenti in eventuali sottodirectory (modifica peraltro non difficile usando sempre FIleSystemObject).

grazie funziona