PDA

View Full Version : [Vb] 1 click, 1 sacco di file


mslv
25-11-2004, 18:20
Scusate se vi disturbo ancora, ma vorrei chiedervi il codice di una procedura per selezionare 1 cartella e memorizzare in un array ogni percorso di ogni file contenuto in una cartella. X esempio, ho la cartella D:\ contenente i file file1.cab e file2.cab.
La procedura deve avere come argomento la cartella in questione e poi deve memorizzare nell'array elenco() elenco(0), che sarebbe D:\file1.cab e elenco(1) che sarebbe D:\file2.cab.

Ok? Grazie 1000!

mslv
26-11-2004, 18:58
Eppure non mi sembre cosi' complicato...

matpez
26-11-2004, 23:51
Ecco a te quello che hai chiesto:


Option Explicit

Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10

Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private 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

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Dim sVetFile() As String

Private Sub Form_Load()

ReDim sVetFile(0)

Call FindFilesAPI("G:\Y2K\UBL Team\Logo")

End Sub

Private Sub FindFilesAPI(ByVal sPath As String)

Dim sName As String
Dim bFound As Boolean
Dim hSearch As Long
Dim WFD As WIN32_FIND_DATA



'controllo formato parametro
If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"

bFound = True
hSearch = FindFirstFile(sPath & "*.*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While bFound
DoEvents
sName = Left$(WFD.cFileName, InStr(WFD.cFileName, Chr$(0)) - 1)
'ignoro le directory . e ..
If (sName <> ".") And (sName <> "..") Then
'seleziono la direcoty o il file
If GetFileAttributes(sPath & sName) And FILE_ATTRIBUTE_DIRECTORY Then
'gestione delle cartelle
Else
sVetFile(UBound(sVetFile)) = sPath & sName
ReDim Preserve sVetFile(UBound(sVetFile) + 1)
End If
End If
bFound = FindNextFile(hSearch, WFD) 'avanzo al prossimo file/cartella
Loop
bFound = FindClose(hSearch)
End If

End Sub

mslv
27-01-2005, 17:07
scusate, avrei da chiedere un'altra cosetta...

non so se è possibile, ma vorrei modificare il codice di sopra in modo che memorizzi in un array anche i file contenuti nelle sottodirectory, per esempio se indico C:\ mi memorizza anche i file in C:\Programmi e in C:\programmi\Visual Studio...
in poche parole, TUTTI i file di una directory.

Cmq il codice di sù è perfetto, grazie!

(nn volevo aprire un'altro topic per scrivere quasi la stessa cosa)

matpez
27-01-2005, 17:45
Così ? :p

RaouL_BennetH
27-01-2005, 18:13
Originariamente inviato da mslv
Eppure non mi sembre cosi' complicato...

Con la premessa che per me invece è complicatissimo, e non sono in grado di aiutarti :(

Se per te non è complicato, come mai non riesci a fartelo da te ?!?

mslv
28-01-2005, 18:22
Originariamente inviato da RaouL_BennetH
Con la premessa che per me invece è complicatissimo, e non sono in grado di aiutarti :(

Se per te non è complicato, come mai non riesci a fartelo da te ?!?


Scusate, ma non pensavo fosse COSI complicato...

be', grazie... cmq anche per me è complicatissimo... tnx!

grazie mapez funziona benissimo non mi sdebiterò mai con te!

grazie!