PDA

View Full Version : how to... spostare file in VB?


octopus_71
19-11-2002, 12:21
ciao

scusate la domanda banale: come si fa a spostare un file o una directory in VisualBasic senza ricorrere direttamente alle API di windows?

in cosa sbaglio?

Set fso = CreateObject("Scripting.FileSystemObject")
Set cartella_princ = fso.GetFolder(Path)
On Error GoTo errori
For Each cartella In cartella_princ.subfolders
i = 1
For Each elemento In cartella.Files
If (elemento.Name <> cartella.Name & "_" & i & ".jpg") Then
elemento.Name = cartella.Name & "_" & i & ".jpg"
elemento.Move ("C:\file_spostati")
End If
i = i + 1
Next
Next


L'errore è: File Already Exists codice: 58

ciao, grazie :)

bsummer
19-11-2002, 12:32
Da quanto mi ricordo, il "move" dell'oggetto filesystemobject restituisce un errore se si tenta di spostare (o rinominare) il file in una posizione dove esiste gia' un'altro file avente tale nome. Ecco perche' ti esce tale errore.
La sovrascrittura dei file quindi non si puo' fare con questo metodo, l'unica alternativa e' controllare che nel path di destinazione non esista un file avente stesso nome (in caso contrario puoi sempre cancellarlo).

Per verificare la presenza di un file usa il metodo "exist", mentre per cancellarlo usa delete.
In alternativa puoi usare "copy" per copiare i file nella nuova cartella di destinazione (abilitando il flag di sovrascrittura) e quindi cancellare i file dalla cartella origine.

Bye

octopus_71
19-11-2002, 13:28
il punto è che non esiste alcun file con quel nome nella cartella di arrivo. cmq ho provato col metodo copy, sostituendo la precedente con:

elemento.Copy "C:\file_spostati", True

ma mi da un altro errore:
Permission Denied, codice 70

grazie bsummer

bsummer
19-11-2002, 17:12
Hmmm. Sembra quasi che ci siano problemi coi permessi sui file...

Prova a spostare il file utilizzando il "move" o il "copy" dell''oggetto filsystemobject .

La sintassi dovrebbe essere del tipo:

fso.move(<percorso + nome file>,<destinazione + nome file>).

Forse ti dara' lo stesso errore, ma non si sa mai.

Inoltre hai provato a leggere nell'help in linea se ci sono note riguardanti eventuali errori (come ad esempio quello che ti ho citato prima, cioe' l'impossibilita' di muovere un file su di una locazione dove e' gia' presente un file omonimo) ?

Cmq, stasera se mi ricordo do un'occhiata al vb...

Bye

DanieleC88
19-11-2002, 19:12
Ma non fate prima a spostare usando la funzione Name del VB ?
A parte FSO, non fate prima ?

bsummer
19-11-2002, 21:56
Credo di aver trovato l'errore.

Aggiungi lo slash alla fine del percorso.

Cioè invece di scrivere

elemento.Move ("C:\file_spostati")

scrivi

elemento.Move("C:\file_spostati\")

Se non metti lo slash vb crede che file_spostati sia il nome che vuoi dare al file. In realtà tale nome è già stato assegnato (ad una cartella in questo caso) quindi da errore.

Bye

octopus_71
20-11-2002, 11:17
grazie 1000 bsummer :)

Ora funziona anche il metodo move. Complimenti per l'intuizione, nella documentazione che ho non ho trovato nemmeno un esempio a riguardo

grazie ancora e ciao

bsummer
20-11-2002, 12:35
Prego, non c'e' di che.

Cmq, i casi di errore sono riportati nell'help in linea del vb.

Ti consiglio di installare l'msdn, se non l'hai gia' fatto.;)

Bye