PDA

View Full Version : codice java in codice visual basic


texerasmo
19-05-2004, 11:45
File[] roots = File.listRoots();

boolean cerca= true;

for(int i=0; ( i<roots.length && cerca); i++){
percorso_fs = roots[i]+"gmdt";
File f = new File(percorso_fs);
System.out.println("percorso: " + percorso_fs);
if (f.exists()){
cerca=false;
percorso = percorso_fs;
System.out.println("percorso: " + percorso);

}

}

questo codice java mi elenca le root del mio pc e quando mi trova la cartella gmdt che si trova sotto una root esce dal for

Ora qualcuno di voi puo aiutarmi a farlo in vb?

matpez
19-05-2004, 12:52
Ecco a te :)

Option Explicit

Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal sDrive As String) As Long
Private Declare Function PathIsDirectory Lib "shlwapi.dll" Alias "PathIsDirectoryA" (ByVal pszPath As String) As Long

Public Enum DRIVE_TYPE
DT_ABSENT = 1
DT_REMOVABLE = 2
DT_FIXED = 3
DT_REMOTE = 4
DT_CDROM = 5
DT_RAMDISK = 6
End Enum

Private Function GetListDrives(ByVal DriveType As DRIVE_TYPE) As Variant

Dim lRet As Long
Dim lTemp As Long
Dim sTemp As String * 255
Dim sAux As String
Dim vDrives As Variant
Dim nI As Integer
Dim nLen As Integer
Dim sVetDriver() As String


'controllo tutti di drive
lTemp = Len(sTemp)
lRet = GetLogicalDriveStrings(lTemp, sTemp)
sAux = Left$(sTemp, lRet)

vDrives = Split(sAux, vbNullChar)

'prendo solo i drive voluti
ReDim sVetDriver(0)
nLen = UBound(vDrives)
For nI = 0 To nLen
If GetDriveType(vDrives(nI)) = DriveType Then
ReDim Preserve sVetDriver(UBound(sVetDriver) + 1)
sVetDriver(UBound(sVetDriver)) = vDrives(nI)
End If
Next

GetListDrives = sVetDriver

End Function

Private Sub Form_Load()

Dim vVet As Variant
Dim nLen As Integer
Dim nI As Integer
Dim bTrovato As Boolean


vVet = GetListDrives(DT_FIXED)
nLen = UBound(vVet)
nI = 0
Do
nI = nI + 1
If CBool(PathIsDirectory(vVet(nI) & "gmdt")) = True Then
bTrovato = True
End If
Loop Until nI = nLen Or bTrovato = True

End Sub

texerasmo
19-05-2004, 13:00
gentilissimo...

matpez
19-05-2004, 13:43
Originariamente inviato da texerasmo
gentilissimo...

Non c'è di che :)

texerasmo
20-05-2004, 12:12
chiedo troppo...
se voglio eliminarla??

matpez
20-05-2004, 13:17
Originariamente inviato da texerasmo
chiedo troppo...


no :p

Ecco devi fare così:

Call RmDir("TUA_PATH_CARTELLA")

texerasmo
20-05-2004, 13:22
RmDir (vVet(nI) & "gmdt")
non pesavo che poteva fare una cosa così semplice..
risolto grazie.

matpez
20-05-2004, 15:13
Bhe tutto quello che si fa in VB6 è dettato dalle API, solo che i programmatori che hanno creato VB hanno pensato che per facilitare il tutto era meglio creare funzioni con include già le API giusto per nn sprecare 10 righe per fare una cosa semplice... ma siccome nn si poteva riempire VB di funzioni allora ci sono sole le principali.. le altri devi scrivere proprio le API, come appunto nell'esempio dell'elenco delle root :)

Conta che la fregatura delle API è appunto la sintassi delle funzioni, infatti ci sono vari programmai che ricordano questa cosa, altrimenti a mente sarebbe una cosa impossibile ricordare centinaia di funzioni con i relativi paramentri!

Per creare ed eliminare le cartelle con le API basta fare così:

Private Declare Function CreateDirectoryEx Lib "kernel32" Alias "CreateDirectoryExA" (ByVal lpTemplateDirectory As String, ByVal lpNewDirectory As String, lpSecurityAttributes As Any) As Long
Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long
Private Sub Form_Load()
'creo la cartella
CreateDirectoryEx "C:\Windows", "C:\KPD-Team", ByVal 0&

'elimino la cartella
RemoveDirectory "C:\KPD-Team"
End Sub

Seza le API e senza dichiare nulla basta utilizzare il MkDir ed il RmDir :p

texerasmo
20-05-2004, 16:46
La catella che devo eliminare è di sola lettura posso forzare l'eliminazione?
oppure posso cambiarli i permessi?

matpez
20-05-2004, 20:31
So cambiare gli attriburi ai file, ma alle directory no, faccio qlc ricerca e poi ti faccio sapere :)

matpez
20-05-2004, 23:09
Per ora ho trovato solo un metodo senza l'ausilio delle API

Devi includere delle referenze del progetto: Microsoft Scripting Runtime

L'ho provato e funziona:

Dim fso As FileSystemObject
Dim lFolder As Folder

Set fso = New FileSystemObject
Set lFolder = fso.GetFolder("c:\gmdt")

lFolder.Attributes = Normal


Se ci sono problemi chiedi :p

texerasmo
27-05-2004, 18:50
tnk..


questo test non mi funziona se la dir si trova nel cdrom..

d:\gmdt

puoi aitarmi per favore?


If CBool(PathIsDirectory(vVet(nI) & "gmdt")) = True Then
bTrovato = True
End If
Loop Until nI = nLen Or bTrovato = True
:cry: :cry:

matpez
27-05-2004, 23:43
Per farti dare l'elenco dei cdrom devi passare alla funzione il parametro DT_CDROM

Allora ti da l'elenco dei cdrom

texerasmo
28-05-2004, 10:44
scusami..
Private Function GetListDrives(ByVal DriveType As DRIVE_TYPE) As Variant

a questa funzione?


come paramentro aggiuntivo oppure devo sostituirlo a driveType

texerasmo
28-05-2004, 11:27
risolto bastava un po' + di attenzione...
tnks

matpez
28-05-2004, 12:17
Originariamente inviato da texerasmo
risolto bastava un po' + di attenzione...
tnks

:sofico: :oink: :sofico: