Newsgroup: it.comp.lang.visual-basic
Titolo: Copia File....

Ciao a tutti,
dall'oggetto sembra un cosa banale ma per me non è cosi.. soprattutto per un 
neofita come me.
Mi spiego.....
Ho una macchina foto digitale  che collego al computer per copiare le foto 
sull'HD.
Il problema è che questa benedetta macchina digitale crea,nella sua memoria, 
più cartelle dandogli come nome la data corrente!
Ogni cartella può contenere una o più foto.
Quindi io dovrei entare in ogni cartella e copiare la/le foto scattate in 
varie date e metterle in una cartella unica.
Ho provato allora a farmi un batch che con lo zip  che comprimesse tutto e 
che poi scompattasse tutto ma senza creare le cartelle.
Apparentemente sembra funzionare ma qui nasce un altro problema: ogni 
cartella può avere la foto dello stesso nome....
Es: cartella \07112005\pic1.jpg   -   cartella \08112005\pic1.jpg
di conseguenza non riesco a copiare tutte le foto.
E' qui ho pensato di farmi un programmino VB...
Ho creato un form dove vado a selezionare e salvare la directory di origine, 
di destinazione e il nome di partenza da utilizzare per rinominare il file.
Quello che vorrei fare è questo:
 Copiare i file da tutte le cartelle (tipo un xcopy /s *.*) in una cartella 
unica ma confrontando ogni file verificandone che nella cartella di 
destinazione non ci sia un
   file uguale. A questo punto lo rinominerei con il nome di partenza 
(es.Foto) e tramite eventualmente un textbox e un timer, aggiungere al file 
da rinominare di un "numero" in modo da avere ad es. Foto1, Foto2, Foto3 ed 
etc....
Usando il FileCopy io riesco a copiare solo un singolo file....
Lo so..... molto incasinato (soprattutto il mio discorso...)
C'è qualche soluzione? anche diversa da quello che vorrei fare?
premetto che la macchina foto e priva di software e che si collega tramite 
USB e viene vista come unità.
Grazie.
Saluti.
Antonio.
-------------------------------------------------------------- 
Non c'e' niente di piu' sicuro di volare. Schiantarsi, invece, e' 
pericoloso. (T. Cowan) 

 C'è qualche soluzione? anche diversa da quello che vorrei fare?
Scrivo a braccio, tu testalo e sistemalo:
Private Sub Copia_Tutto(byval Directory_Radice as string, Byval 
Directory_Destinazione as String)
Dim FSO as Object
Set FSO=CreateObject("Scripting.FileSystemObject",)
Dim Fol_From as Object
Set Fol=FSO.GetFolder(Directory_Radice)
Call Copia_Files(Fol,Directory_Destinazione)
End Sub
Private Function Copia_Files(Byref Fol as Object, Byval Dest as string) 
as Long
Dim Fil as Object
For Each Fil in Fol.Files
FSO.CopyFile Fil.fullPath,Dest & "_" & Fil.Name 'Questa proprio me la 
invento, va sistemata sintatticamente
Next Fil
For Each Fil in Fol.Folders
Call Copia_Files(Fil,Dest)
Next Fil
End Function
Ciao
Alberto
-- 
Si è visto di meglio,
ma si è scopato di peggio,
qualche volta a pago
e non erano neanche sempre donne
[Paolo]

 pericoloso. (T. Cowan)
se non altro i passeggeri italiani non applaudono :)
ciao, a.


:-o  Cavoli che velocità!!
Grazie veramente di cuore!! provo è aggiusto! 

 ctrl-v
Però io il nome delle directory non le conosco a priori.... con filecopy io 
devo definire qualè A e qualè B...
Per B non c'è problema ...ma per A?
Grazie mille!

 Grazie mille!
le directory sono stringhe del filesystem, come i file.
    Dim s As String
    s = Dir$(mainPath)
    While s <> ""
        If s <> "." And s <> ".." And (GetAttr(mainPath & s) And
vbDirectory) = vbDirectory Then
            ...
        End If
        s = Dir
        DoEvents
    Wend
ciao, a.


Scusa se rispondo solo ora.
Sto provando con le dritte che mi ha dato "Albe V°" ........purtroppo il 
programmino lo sto facendo nei ritagli di tempo del lavoro....
Grazie mille per la risposta!

Alura.... intanto ancora grazie.....
anse se ho fatto il codice che sarà "nà schifezz..." credo di essere a buon 
punto...
seguendo i vostri consigli e modificando quello scritto da  ho fatto così...
   Dim s As String
   Dim MainPath As String
   Dim fs
   Dim Direct
   Set fs = CreateObject("Scripting.FileSystemObject")
   MainPath = "C:\prova\"
    s = Dir$(MainPath, vbDirectory)
   Do While s <> ""
    If s <> "." And s <> ".." Then
     If (GetAttr(MainPath & s) And vbDirectory) = vbDirectory Then
      Direct = MainPath + s + "\*.jpg"
      fs.copyfile Direct, Form2.Text2.Text
     End If
    End If
        s = Dir
    Loop
In questo modo riesco a copiare per ogni directory tutto quello che c'è 
all'interno...
Non mi resta che confrontare i file uguali e rinominarli... 

 Alura.... intanto ancora grazie.....
HO RISOLTO!!! A chi interessa posto il codice...
Saluti  e grazie! 

 Saluti  e grazie!
postalo anche a chi non interessa. mal che vada google deve comprarsi un hd
un po' piu' grosso :)

Ok.... l'imposrtante e che non mi prendiate in giro per il codice. :)
vi ricordo che sono un neofita...
'---------------------------------------  
Inizio -----------------------------
Dim s As String
Dim MainPath As String
Dim MyFile As String
Dim fs
Dim i
Dim h
MainPath = MyPath '(MyPath è il disco dove ci sono le directory)
s = Dir$(MainPath, vbDirectory)
 Do While s <> ""
   If s <> "." And s <> ".." Then
     If (GetAttr(MainPath & s) And vbDirectory) = vbDirectory Then
  'File1 e File2 sono dei FileTextBox messi a Visible = false
       File1 = MainPath + s
       File2 = Form2.Text2.Text
       Set fs = CreateObject("Scripting.FileSystemObject")
       For i = 0 To File1.ListCount
           MyFile = File1.List(i)
           If MyFile <> "" Then
             For h = 0 To File2.ListCount
             If MyFile = File2.List(h) Then
                Call Rinomina_File ' qui richiamo una procedura di rinomo 
file e poi esco dal ciclo
             GoTo Fine_Ciclo
             End If
            Next h
           MyFile2 = MainPath + s + "\" + MyFile
           fs.copyfile MyFile2, Form2.Text2.Text  'se non trovo uguaglianza 
con gli altri file copio il file originale
           End If
Fine_Ciclo:
       Next i
     End If
    End If
    s = Dir
    Loop
'--------------------------------------------------  
 Fine ------------------------
So già che è una schifezza.... ma almeno provandolo (anche in debug) sembra 
funzionare senza saltarmi nessun file...
Grazie.
Saluti...