Newsgroup: it.comp.lang.visual-basic
Titolo: Problema nel copiare un file

Sto cercando di scrivere un programma che esegua una copia di un file con
una diversa estensione a mo' di backup; pensavo fosse una banalità.
Ho provato alcuni metodi, ma non sono riuscito a risolvere il problema che
se nel percorso del file da copiare c'è uno spazio, il programma abortisce
con Run-time error 52 - Bad file name or number. Se, invece, non vi sono
spazi, la copia procede regolarmente.
In MSDE non ho trovato nulla di illuminante.
In calce il sorgente ridotto all'osso.
Grazie per l'eventuale aiuto.
Marco Springhetti
*******************************************
Private Sub Form_Load()
    Dim Fname, FnameRoot, NewFname, NewExt As String
    Dim OldX, PosDot As Integer
    Dim fso As New FileSystemObject
'
    Fname = CStr(Command)
'   Se imposto a mano Fname = "c:\aaa aaa\a a.txt" funziona bene!!!
    If Len(Fname) = 0 Then
        GoTo out
    End If
    PosDot = InStrRev(Fname, ".")
    FnameRoot = Left(Fname, PosDot)
    OldX = 0
A1: OldX = OldX + 1
    NewExt = "old" & CStr(OldX)
    NewFname = FnameRoot & NewExt
    If fso.FileExists(NewFname) Then
        GoTo A1
    End If
    fso.CopyFile Fname, NewFname
out:
    Unload Me
End Sub

     Dim fso As New FileSystemObject
è una banalità :)
non serve che usi fso.
prova con
FileCopy "C:\dir con spazi\file con spazi.test", "c:\altro file con 
spazi.test2"
-- 
regards,
Simon


l'ho appena riprovato col tuo modo di tagliare l'estensione:
file1 = "c:\dir con spazi\file con spazi.test"
PosDot = InStrRev(file1, ".")
FnameRoot = Left(file1, PosDot)
FileCopy file1, FnameRoot + "backup"
funziona anche così.
-- 
regards,
Simon

 ha scritto nel messaggio
news:GDUv9.52313$aL4.1...@news1.tin.it...

1) Ti dà errore perchè il file Fname non esiste: controlla bene in debug
cosa vale Fname.
2) Le dichiarazioni di variabili del tipo:
Dim Fname, FnameRoot, NewFname, NewExt As String
andrebbero scritte:
Dim Fname As String
FnameRoot As String
NewFname As String
NewExt As String
perchè, come le hai scritte tu, solo la variabile NewExt è String, mentre le
altre sono Variant (perchè non specificate). Lo stesso dicasi per la riga
successiva con le due variabili Integer.
3) Hai usato il FileSystemObject solo parzialmente, visto che potevi
ricavare l'estensione ed il nome del file usando i metodi dell'oggetto
stesso (vedi GetExtensionName ecc...).

 stesso (vedi GetExtensionName ecc...).
Giusto, ma non mi pare che per quello che devo fare mi sia di utilizzo; devo
infatti sostituire l'estensione, qualunque essa sia, con una mia standard
tipo .old1, old2, old3 ecc. Certo, se ci fosse una
fso.GetBasenameWihPathWithoutExtension... :-)
Grazie.
M. Springhetti

 funziona anche così.
Grazie per l'aiuto.
Ciò che dici è vero, ma funziona perché tu inizializzi la variabile file1
all'interno del programma.
Se invece usi file1 = Command e passi il nome del file come parametro
all'eseguibile (pincopallino.exe "c:\dir con spazi\file con spazi.test"),
non funziona più.
E' questo il mio problema.
M. Springhetti

 all'istruzione fname=command ma non riesco ad individuarlo meglio.
Nelle proprietà del progetto, scheda "Crea", puoi inserire
una stringa da richiamare con Command$ anche quando
lanci il prog dall'IDE. Prova ad effettuare il debug così...
Comunque la routine sotto funziona, l'ho provata.
E' molto "passo-passo", per capire meglio i vari passaggi :-)
************************
Private Sub Command1_Click()
    Dim PosUltimoPunto As Long
    Dim NuovaEstensione As String
    Dim NomeDelFile As String
    Dim VecchioNome As String
    Dim NuovoNome As String
    NuovaEstensione = "OLD"
    VecchioNome = Command$
    PosUltimoPunto = InStrRev(Command$, ".")
    NomeDelFile = Mid$(Command$, 1, PosUltimoPunto)
    NuovoNome = NomeDelFile & NuovaEstensione
    Name Command$ As NomeDelFile & NuovaEstensione
    MsgBox Dir$(NuovoNome)
End Sub
************************
Bye, G.

 M. Springhetti
-- 
regards,
Simon