Newsgroup: it.comp.lang.visual-basic
Titolo: Funzione dir bastarda dentro

Dunque, ho questo codice
MyFile = Dir(Orig & Path) ' Recupera la prima voce.
Do While MyFile <> ""   ' Avvia il ciclo. *************'E' QUI CHE NON MI
VEDE UN FILE, quindi non procede con la copia************
   ' Ignora la directory corrente e quella di livello superiore.
    'ricordiamoci che la funzione dir restituisce anche dei file
         'Debug.Print Path & MyFile
         'FACCIO LA COPIA del file
         Esito = "Ok"
         Errore = ""
         If Dir(Dest & Path & MyFile) > "" Then
            If FileDateTime(Orig & Path & MyFile) >= FileDateTime(Dest &
Path & MyFile) Then
                txtStato.Text = txtStato.Text & "COPIA DI " & Orig & Path &
MyFile & fr
                txtStato.SelStart = Len(txtStato.Text)
                FileCopy Orig & Path & MyFile, Dest & Path & MyFile
                Else
                Esito = "Errore"
                Errore = "File di origine più vecchio di quello di
destinazione"
                ContaNonCancellare = ContaNonCancellare + 1
                NonCancellare(ContaNonCancellare) = Orig & Path & MyFile
                Notifica = True
            End If
            Else
            txtStato.Text = txtStato.Text & "COPIA DI " & Orig & Path &
MyFile & fr
            txtStato.SelStart = Len(txtStato.Text)
            FileCopy Orig & Path & MyFile, Dest & Path & MyFile
            End If
            rsLog.AddNew
            rsLog!Data = Date
            rsLog!ORA = Time
            rsLog!Origine = Orig & Path & MyFile
            rsLog!Destinazione = Dest & Path & MyFile
            rsLog!TipoOperazione = "Copia dei file"
            rsLog!Esito = Esito
            rsLog!Errore = Errore & ""
            rsLog.Update
         'Debug.Print Folders(Cont)
         'MsgBox Folders(Cont)
         Cont = Cont + 1
         MyFile = Dir ' Legge la voce successiva.
DoEvents
Loop
In una cartella con 2 file SENZA attributi (AP0031.exe, AP0029.EXE) la
funzione mi vede regolarmente il primo file, mentre non trova il secondo, ma
non solo....
c'è dell'altro, a volte al posto del secondo file ne trova uno denominato
AP0000.EXE che NON ESISTE!!!
vi assicuro che è così, nelle impostazioni di windows ho settato di non
nascondermi nessun file, quindi sono sicuro che AP0000.EXE non esista, e
sono altrettanto sicuro che AP0029.EXE esista, e lo debba vedere.
Il colmo accade quando cancello dalla directory di origine il file
AP0031.EXE, in assenza di questo file la funzione dir mi vede regolarmente
l'altro, AP0029.EXE, ma in presenza del primo, il secondo non viene visto!!!
AIUTO PLEASE!!!!
--
---------------------------------------------------------
Ruscelli David
    Ufficio E.D.P.
    Intesa Soc. Coop. a r.l.
www.intesacoop.com
--------------------------------------------------------

 Do While MyFile <> ""   ' Avvia il ciclo. *************'E' QUI CHE NON MI
E' piu' performante cosi':
Do While (Len(MyFile) > 0)
-- 
ciao, hal
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 anche un secondo parametro: prova a giocare un po' con quello.
Ok, ho provato a giocare sul secondo parametro, penso che tu intendessi
questo,
MyFile = Dir(Orig & Path, vbNormal Or vbHidden Or vbReadOnly Or vbSystem)
Ma idem, perň ho scoperto una cosa, io avevo fatto prove con coppie di file
all'interno della dir, aggiungendo piů file, č risultato che il problema č
il seguente, viene visto sempre e solo il primo file (non ho ancora scoperto
in base a quale criterio li ordina, penso in ordine di dimensione), gli
altri non se li caga neanche di striscio....
ho provato a cambiare dir in dir$ ma nisba....
Hal, ti prego....aiutami!
:-)

 Loop
La Dir seguita da altre Dir crea casini immensi (č come se avesse un vettore
suo in memoria e unico che si ricompone/sporca a ogni altra DIR).
Prova a fare la Dir di TUTTI i files e mettili in un vettore, poi, per ogni
file preso dal vettore, puoi fare la DIR (da sola) per vedere se c'č il file
di destinazione.

 altri non se li caga neanche di striscio....
A me una cosa cosě elenca tutti i files di una cartella, e in modo
corretto... ;-)
Function z()
    Dim var As Variant
 
    var = Dir("C:\AleD\MP3\*.*")
    Do While var <> ""
        Debug.Print var
        var = Dir()
    Loop
End Function


 di destinazione.
Ho capito, praticamente se uso la funzione dir e prima di averla chiusa
nidifico all'interno di un loop altri dir, si incasina...
Quindi dici fare le cose una alla volta usando vettori, poi lavorare con
essi.
Ok, proverò, però inutile dire che secondo me è un bug!
AZZ!
Poi ti faccio sapere...
:-)

 ha scritto

qui sotto un test per inserire in un mdb l'elenco dei file di una dir,
testando i tempi usando i controlli o il codice. provato anche con dir
pienotte tipo \nt\sys32. (va da se' che vince il codice, di un bel po').
forse ti serve, visto che fai qualcosa di simile.
--
ciao, j.
www.sundaysw.com
    (
    cavoli, perche' non riesco mai a star zitto?
    hal:
    > Allora va bene per me che sono bastardo geneticamente :-PPP
    e dove li hai messi giov1961 e giac1961 ? :P
    )
Private Sub cmdAddCode_Click()
    If File1.ListCount < 1 Then Exit Sub
    Dim time1: time1 = Timer
    Dim db As Database, rs As Recordset
    Set db = OpenDatabase("db1.mdb")
    Set rs = db.OpenRecordset("files")
    Dim sName As String
    sName = Dir$(sPath, vbDirectory)
    While sName <> ""
        If sName <> "." And sName <> ".." Then
            Label1 = sName
            With rs
                .AddNew
                !fname = sName
                !fpath = sPath
                !fdate = FileDateTime(sPath & sName)
                !fsize = FileLen(sPath & sName)
                .Update
            End With
        End If
        sName = Dir
        DoEvents
    Wend
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
    Data1.Refresh: DBGrid1.Refresh: Data1.Recordset.MoveLast
    Caption = Format(Timer - time1, "##0.000")
End Sub
Private Sub cmdAddControl_Click()
    If File1.ListCount < 1 Then Exit Sub
    Dim time1: time1 = Timer
    Dim db As Database, rs As Recordset
    Set db = OpenDatabase("db1.mdb")
    Set rs = db.OpenRecordset("files")
    Dim j As Long
    With rs
        For j = 0 To File1.ListCount - 1
            File1.ListIndex = j
            .AddNew
            !fname = File1.FileName
            !fpath = sPath
            !fdate = FileDateTime(sFile)
            !fsize = FileLen(sFile)
            .Update
            DoEvents
        Next
    End With
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
    Data1.Refresh: DBGrid1.Refresh: Data1.Recordset.MoveLast
    Caption = Format(Timer - time1, "##0.000")
End Sub

Ok, proverņ, perņ inutile dire che secondo me č un bug!
No, non lo e', funziona cosi' by design da sempre.
Per non rompersi le palle con i vettori, che usati in questo caso
mi sembrano uno spreco di energie mentali, puoi usare le funzioni
dell' api FindFirstFile e compagnia, che (parere personale) trovo
molto piu' pratiche.
-- 
ciao, hal


Non per aprire una polemica, ma io MSDN lo uso, e questa cosa onestamente me
la sono persa!
Sono in buona fede, qiundi diciamo che me la sono persa...
;-)

 ;-)
    Ecco, diciamo cosi', ch'e' meglio. Voglio proprio vederti quando andrai
da google a domandare se per piacere cancellano questo thread.
    :)))
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 molto piu' pratiche.
Ho provato, ed era effettivamente così, nidificando la funzione dir, essa si
reinizializzava quando non doveva e mi creava casini immani, riempiendo
matrici, evitando di usare la funzione dir in modo nidificato, tutto fila
liscio come l'olio, volevo veramente ringraziarvi di cuore tutti perchè
senza di voi sarei ancora nella merda fino al collo.
GRAZIE GRAZIE GRAZIE

 GRAZIE GRAZIE GRAZIE
E perchč non glazie, glazie, glazie?
Quella in "Trova", me la spieghi, per favore? Glazie.

 ha scritto nel messaggio
news:%HyV8.115219$Kt3.2...@twister2.libero.it...

Era per dire una cazzata....
e ci stava pure bene....Glande....Cazzata
Ma quanto sono idiota?
Occhio perchč č contagioso...
Chi mi conosce dopo un po' comincia a chiedersi:
<<Un amico normale no eh?... va beh!>>