Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Controllo esistenza files

Ciao a tutti,
ho un problemino che vorrei sottoporvi, magari viene fuori una soluzione 
un po' furba.
Io ho 2 percorsi di file, il primo con il percorso assoluto (es. 
c:\pippo\pluto.txt) e il secondo che potrebbe essere relativo (es. 
c:\topolino\..\pippo\pluto.txt).
Ora vorrei verificare che effettivamente questi due files siano coincidenti.
Come fare?
In realtà il mio problema completo è un pochino più complesso: ho in una 
collection una lista di files con percorso assoluto.
In una seconda collection ho una lista di files con percorso relativo.
Ciò che dovrei riuscire a ottenere è una terza lista con i files che 
sono presenti nella prima ma non nella seconda
es:
lista1
c:\pippo\pluto.txt
c:\pippo\paperino.txt
lista2
c:\topolino\..\pippo\pluto.txt
risultato
c:\pippo\paperino.txt
Qualche buona idea?
P.S.: i files potrebbero non esserci fisicamente sul disco, quindi 
niente Dir() e compagnia :)
Ciao, grazie

prova ad usare questa funzione che ho creato. restituisce io nome del file
dato un percorso
Ingegnati come meglio usarla
Spero cmq di non aver frainteso la tua richiesta.
bye
------------------
Public Function NomeDaPercorso(Percorso As String) As String
Dim i As Integer
Dim Nomefile, Char As String
    'Si sposta nella riga di comando un carattere alla volta.
    i = Len(Percorso) + 1
    While i <> 0
        i = i - 1
        Char = Mid(Percorso, i, 1)
        If (Char = "\") Then 'Controlla se vi è il carattere \.
            i = 0
        Else
            Nomefile = Mid(Percorso, i, 1) & Nomefile
        End If
    Wend
    NomeDaPercorso = Nomefile
End Function

 Qualche buona idea?
Idea1
un parser sul percorso ?
infondo i caratteri da trackare sono pochi :
"\\" , ".." , "." , ":" e altri 2-3 !
ti fai il parser che riporta il percorso da relativo a assoluto che ne dici
?
Idea2
    potresti prendere il file di una lista e confrontarlo con l'omonimo di
un altra e se sono uguali passare oltre, in fondo a te serve solo avere la
lista delle differenze, quindi gia' analizzando il nome file o il nome
dell'ultima subfolder ti screma un bel po di risultati, poi con l'api
"CompareFileTime" fra 2 file omonimi vedi se sono uguali o no
non puoi stroncare il problema alla radice e far inserire un link assoluto
in lista2 ?
-- 
<Gigio2K>
--- 
www.g2kweb.it
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 in lista2 ?
Il problema di base è questo:
Mentre si crea un progetto VB, capita che aggiungi e togli form e moduli 
che poi rimangono vaganti nelle cartelle senza essere usati o 
addirittura senza essere completi (mai successo di ritrovarti form1.frm 
in giro che non sai cosa siano?).
Quindi volevo che, leggendo il .vbp mi tiro fuori tutti i files usati 
dal progetto (che possono avere un percorso relativo) e confrontarli con 
quelli presenti nelle cartelle interessate (che equivale al percorso 
assoluto del .vbp + il percorso relativo del file) e quelli di troppo 
volevo mi fossero segnalati, in modo da fare un po' di pulizia nelle 
cartelle dei progetti.
Capito? :)
Ciao

Allora la mia funzione fa proprio al caso tuo.
Leggi la lista di files dal vbp. Leggi la lista di files dall'hd.
Le salvi entrambe in due vettori di stringhe e con 2 for nidificati richiami
la funzione.
Esempio
for i=0 to LunghezzaLista1
    for z=0 to LunghezzaLista2
        if NomeDaPercorso(Lista1(z)) = NomeDaPercorso(Lista2(i)) then
                ...codice di quello che vuoi fare
        end if
    next
next
cosa te ne pare?
bye

 
Non proprio :)
Perchč la tua funzione restituisce solo il nome del file dato il 
percorso, ma form1.ftm potrebbe essere in due percorsi diversi e quindi 
non fare capo allo stesso file.
E la tua funzione potrebbe essere sostituita da un piů efficiente
FileDaPercorso = Mid$(File, instrrev(file, "\") + 1)
:)
Ciao

 pulizia nelle cartelle dei progetti.
allora tagliamo la testa al torello :
scegli un algoritmo qualsiasi di CRC , associa ad ogni file di ogni lista la
sua chiave e poi "depenna" quelle uguali, risultato ? rimangono le key dei
file che non compaiono nella cartella di progetto e quelli che ci sono e non
sono collegati al Vbp !
l'algoritmo te lo scegli tu tra tutti quelli in giro di "controllo" dei file
!
-- 
-Gigio@Work(?)-

 sua chiave e poi "depenna" quelle uguali
il .vbp non contiene informazioni sul file fisico ma solo il percorso!
Non posso confrontare il percorso con il file fisico.
Ciao

 la funzione.
Mi sono fatto questa funzione.
Secondo voi la logica per passare da un percorso relativo a quello 
assoluto č buona o c'č qualche falla?
Lo so, va in errore se il percorso relativo č malformato (es. 
C:\pippo\..\..\pluto.txt) ma questo non mi importa.
Public Function RelativeToAbsolutePath(ByVal RelativePath As String, 
Optional BasePath As String)
     Dim straLPath() As String
     Dim intaLSkip() As Boolean
     Dim strLPath As String
     Dim i As Long
     Dim j As Long
     Dim idx As Long
     straLPath = Split(RelativePath, "\")
     ReDim intaLSkip(0 To UBound(straLPath))
     For i = 0 To UBound(straLPath)
         idx = idx + 1
         If (straLPath(idx) = "..") Then
             For j = idx + 1 To UBound(straLPath)
                 straLPath(j - 2) = straLPath(j)
             Next j
             idx = idx - 2
         End If
     Next i
     For i = 0 To idx + 1
         strLPath = strLPath & "\" & straLPath(i)
     Next i
     If (Len(BasePath) > 0) Then
         If (Right$(BasePath, 1) <> "\") Then BasePath = BasePath & "\"
     End If
     RelativeToAbsolutePath = BasePath & Mid$(strLPath, 2)
End Function
Ciao


bhe ? il percorso punta sempre a un file no ?
Crei la chiave relativa a quel file che viene puntato dal percorso nel VBP e
passi al file successivo e popoli la lista del VBP
per la lista delle cartelle e' ancora + semplice, scansioni la dir e allo
stesso modo di sopra crei la chiave es:
'Leggi il vbp e popoli la lista1
'Scansioni la dir e popoli lista2
'Lista1 e 2 sono matrici di (X,2) elementi
for i = 0 to ...
    Lista1(i,1) = CHIAVE(Lista1(i,0)
...
for i = 0 to ...
    Lista2(i,1) = CHIAVE(Lista2(i,0)
...
Funcrion Chiave(Percorso as string)as String
    'creo la chiave MD5 del percorso passato e la restituisco
    Chiave = MD5(Percorso)
End func
Poi hai 2 liste che contengono ANCHE LE CHIAVI Dei file, le combinazioni :
1 chiave singola : metti nella lista3
2 chiavi uguali ? DEPENNI
3 chiavi uguali o +  : (da implementare), un file dei 3 o + e' di troppo !
capito cosa intendevo ?
-- 
-Gigio@Work(?)-

 FileDaPercorso = Mid$(File, instrrev(file, "\") + 1)
Oppure anche 
FileDaPercorso=Right(File,instrrev(file,"\"))
-- 
Ciao,
        Fabrizio
<=- 
http://www.negusweb.it
 -=>

Azz.
non ero a conoscenza della funzione instrrev
grazie mille x la dritta. ora alcuni miei prog girano meglio.
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no
(credevo di averla rubata a SpecialKeta :P )
web: 
http://www.nicolaottomano.it