Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Usare la funzione Dir$ per ricercare directory

    Ciao a tutti, sono nuovo del forum e nn ho ben capito se è questa la sezione giusta x VB6...
    ho un piccolo problema nell'usare Dir$ in modo ricorsivo alla ricerca di sotto-cartelle in un percorso principale. il codice che uso è questo:

    codice:
        Sub Scan(ByVal Fold$)
                Dim SFold$, Recall$
    
            SFold = Dir(Fold, vbDirectory)
            Do Until SFold = Empty
                DoEvents
                If Not (SFold = "." Or SFold = "..") Then
                    If (GetAttr(Fold & SFold) And 16) = 16 Then
                        Debug.Print Fold & SFold
                        Recall = Fold & SFold & "\"
                        Call Scan(Recall)
                    End If
                End If
                SFold = Dir
            Loop
        End Sub
    Il problema si verifica al rientro dalla ricorsione nella riga SFold = Dir, in quanto Dir$ non riesce ad aggiornarsi con la sub-cartella successiva... faccio un esempio (il path di partenza è C:\prova):

    C:\prova\Sub1 =>Viene controllata
    C:\Prova\Sub1\SubSub1 => Viene controllata
    C:\prova\Sub2 =>Non viene vista in quanto Dir si paralizza su C:\prova\sub1

    spero di essere stato chiaro ed esaustivo, e ringrazio ttt in anticipo x eventuali risposte e suggerimenti x risolvere il problema
    Pray your God or burn in my Hell

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il codice che hai mostrato ha parecchi punti da rivedere.

    La funzione Dir$ non è adatta alla chiamata ricorsiva a causa della sua implementazione. Devi predisporre alcuni accorgimenti.

    Analizza qualche esempio, come

    http://www.devx.com/vb2themax/Tip/19058

    oppure

    http://www.vb-helper.com/howto_list_subdirectories.html

    o anche

    http://www.ammara.com/access_image_f...er_search.html
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    grazie oregon x la risposta e x i links...

    speravo ke qualcuno sapesse correggere il bug di Dir$ ma a quanto pare nn è possibile a meno di usare array o collection...

    infatti avevo già pensato di leggere prima tutte le cartelle nella main directory e poi x ognuna richiamare ricorsivamente la routine... xò non è una grande soluzione...

    grazie cmq, penso proprio ke mi butterò sul FSO in quanto più versatile x questo tipo di situazione... grazie ancora


    PS:
    Il codice che hai mostrato ha parecchi punti da rivedere.
    tanto x curiosità, quali sono? xkè questo codice mi capita di riutilizzarlo più volte in un progetto, nn alla stessa maniera, ovvio, ma è possibile che commetta sempre lo stesso errore... sarei lieto di sapere cosa, a parer tuo, nn va...
    Pray your God or burn in my Hell

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Hell_Devil
    speravo ke qualcuno sapesse correggere il bug di Dir$
    Non è un bug. Quella funzione nasce così e non è pensata per chiamate ricorsive.

    penso proprio ke mi butterò sul FSO
    tanto x curiosità, quali sono?
    Ad esempio

    Fold & SFold

    potrebbe creare path sbagliati.

    Ma non ci pensare tanto ... usa FSO e lascia perdere Dir$ (per questo tipo di operazioni)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    mi sono reso conto di aver omesso che devo scansionare il mio intero HD alla ricerca di tutte le cartelle e sotto-cartelle presenti...

    detto questo ho provato anche usando FSO ma il risultato nn cambia:

    1) non riesco ad entrare nelle cartelle protette

    2) la routine si interrompe senza segnali di errore prima di aver finito la scansione (ad es. controlla la prima dozzina di cartelle in WINDOWS e poi termina senza errore)

    3) viene mostrato un errore su una fantomatica cartella che FSO trova in C:\ ,chiamata System Volume... ma la cosa belle è che non viene visualizzata neanche usando Cerca di WinXP...

    insomma la cosa è più complicata del previsto ... e sto inziando a pensare che non sia del tutto fattibile in VB6 la scansione di un intero HD ... correggimi se sbaglio

    grazie
    Pray your God or burn in my Hell

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    sto inziando a pensare che non sia del tutto fattibile in VB6
    Non è vero ... si può fare, anche se è un compito "pesante" scansionare tutto un disco.

    1) Le cartelle "protette" (o di sistema, o in cui non hai l'autorizzazione anche se administrator) le devi evitare; quando avrai un errore per quelle cartelle, ignoralo e continua

    2) di quale routine parli?

    3) quella cartella esiste (devi impostare la visualizzazione delle cartelle di sistema) ma è tra quelle che non puoi visitare senza permessi particolari
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Le cartelle "protette" (o di sistema, o in cui non hai l'autorizzazione anche se administrator) le devi evitare; quando avrai un errore per quelle cartelle, ignoralo e continua
    e allora gli antivirus come fanno?

    di quale routine parli?
    si scusami, hai ragione, pensavo di aver postato il codice, ma non l'ho fatto...
    parlavo di questa routine:
    codice:
    Sub Scan(ByVal Source As String)
        Dim Fso As Object, oMain As Object, oFold As Object
    
    On Error Resume Next
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set oMain = Fso.GetFolder(Source)
    For Each oFold In oMain.SubFolders
        DoEvents
        Debug.Print oFold
        Call Scan(oFold)
    Next oFold
    Set oMain = Nothing
    Set Fso = Nothing
    End Sub
    se la provi sul tuo HD dove hai installato il sistema operativo ti accorgerai che la routine termina mooolto prima di arrivare a cartelle tipo Programmi. Legge infatti solo alcune cartelle sub-dir in windows poi termina sola...
    Pray your God or burn in my Hell

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Hell_Devil
    e allora gli antivirus come fanno?
    Gli antivirus hanno permessi maggiori ... di sistema.

    parlavo di questa routine:
    La proverò più tardi ma, in generale, se non prevedi degli errori (di accesso a cartelle protette) e non li recuperi, si potrebbe fermare alla prima cartella di sistema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    permessi maggiori ... di sistema.
    mi sai dire come ottenere i permessi necessari, anche indirizzandomi verso qualche link (possibilmente in italiano)...

    io l'unico modo che ho trovato per entrare in queste cartelle è stato seguire i passi molto casarecci in questo link http://www.doxaliber.it/exploit-per-...-in-win-xp/166 che se dovessero essere programmati in VB6 sarebbero davvero difficili x me...

    grazie
    Pray your God or burn in my Hell

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Hell_Devil
    mi sai dire come ottenere i permessi necessari, anche indirizzandomi verso qualche link (possibilmente in italiano)...
    Dovresti far girare il tuo programma come servizio con l'utente LocalSystem.

    Ma non è banale e, soprattutto, non è utile.

    Un normale programma non dovrebbe accedere alle cartelle di sistema. Non ne ha bisogno ed è particolarmente pericoloso per l'integrità del sistema stesso.

    io l'unico modo che ho trovato per entrare in queste cartelle è stato ...
    Lascia perdere queste attività poco lecite ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.