Oppure

Loading
25/03/14 20:30
trattobasso
Ciao, questa volta non può essere colpa di uno spazio (per nessuno) almeno spero....
con il seguente codice ho sempre copiato/spostato file da una cartella ad un'altra senza apparenti problemi.
System.IO.File.Move((My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp\Easy Weld.exe"), (My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\Easy Weld.exe"))

Questa però mi da errore, nel particolare il seguente:
Eccezione non gestita di tipo 'System.IO.FileNotFoundException' in mscorlib.dll
Ulteriori informazioni: Impossibile trovare il file 'C:\Users\Manuel\Documents\Easy Weld\Temp\Easy Weld.exe'.

Ovviamente il problema è che il file esiste....:-?:hail:
Cosa può essere questa volta? Vi chiedo cortesemente un piccolo aiuto.

Ciao e grazie in anticipo a tutti.
aaa
25/03/14 21:48
Poggi Marco
Ciao!

Prova a memorizzare i percorsi dei vile su due stringhe separate, e successivamente, con il debugger verifica se i file esistono. Oppure utilizza il metodo File.Exists( ) ( msdn.microsoft.com/it-it/library/…(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1 )
aaa
26/03/14 8:41
trattobasso
Ciao Marco,
ho provato anche a memorizzare i percorsi su due stringhe ma non trova lo stesso il file. Il metodo File.Exist potrei provare ma ovviamente mi restituirà che non trova il file.
E se provassi a dire di copiare tutto il contenuto della cartella in quella nuova senza specificare quali file copiare?
aaa
26/03/14 9:31
nessuno
A me funziona regolarmente. Se esegui questo codice

        Dim p1 As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments
        Dim p2 As String = My.Computer.FileSystem.SpecialDirectories.ProgramFiles

        Console.WriteLine(p1)
        Console.WriteLine(p2)


le cartelle sorgente / destinazione sono quelle che ti aspetti ?

Ovviamente, penso che le prove le fai rimettendo a posto il file ogni volta dato che la prima volta che la move funziona, il file sorgente non c'è più.
Ultima modifica effettuata da nessuno 26/03/14 9:32
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/03/14 13:14
R0gerBlack
Prova questo codice, dalla OpenFileDialog seleziona il file interessato che il programma dice che non esiste. Dopo di ché ti usciranno in un messaggio le directory del file selezionato (per forza esistente) e della directory che ci hai dato tu, così potrai controllare se coincidono o meno).

Dim path As String
        Dim o As New OpenFileDialog
        If o.ShowDialog = Windows.Forms.DialogResult.OK Then
            path = o.FileName
            MsgBox(path & Environment.NewLine & My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp\Easy Weld.exe")
        End If


Suggerimento: Usa IO.File.Copy al posto di Move, così non devi ogni volta assicurarti che il file sia lì (dubito che sia di dimensioni notevoli da rendere scomoda la copia).
aaa
26/03/14 14:10
trattobasso
ciao nessuno, certo controllo sempre che sia tutto al posto giusto ogni volta. I percorsi coincidono.

ciao roger, ho fatto e ti allego l'immagine...i percorsi sono identici.
Le dimensioni no, non sono notevoli, sono è l'eseguibile del programma che devo aggiornare ed è poco più di 1mb per ora.

Comunque sia poco importa, ho capito che vs è ce l'ha con me, vi spiego:
questo è il codice completo per il download e sostituzione dell'eseguibile aggiornato così se può tornare utile a qualcuno...

System.IO.Directory.CreateDirectory((My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp"))
        My.Computer.Network.DownloadFile("http://xxxxx/download/easy_weld/applicazione/Easy Weld.zip", (My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp\Easy Weld.Zip"))
        System.Diagnostics.Process.Start("7z.exe", "e """ + My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp\Easy Weld.Zip"" -o""" + My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp""")
        Dim processList() As Process
        processList = Process.GetProcessesByName("Easy Weld.vshost")
        processList = Process.GetProcessesByName("7z.exe")
        For Each proc As Process In processList
            proc.Kill()
        Next
        System.IO.File.Delete(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\Easy Weld.exe")
System.IO.File.Move((My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp\Easy_Weld.exe"), (My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\Easy Weld.exe"))


In questo modo non trova il file.
Se invece isolo ed eseguo solo la riga di codice

System.IO.File.Move((My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp\Easy_Weld.exe"), (My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\Easy Weld.exe"))

...funziona.

Può essere che il processo di estrazione dal file zip non sia abbastanza veloce e il move non lo trova perchè è ancora in corso l'estrazione?
aaa
26/03/14 14:32
nessuno
E' ovvio ... se solo l'avessi detto prima.

Se l'estrazione non è terminata, il file è ancora in Temp e quindi non esiste.

Devi attendere che il processo termini (e c'è il modo corretto senza quelle obbrobriose Kill ...)
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/03/14 16:10
trattobasso
ciao nessuno, ma è questo il bello, la differenza tra le tue 5 stelline e le mie :asd:
onestamente mi è venuta la botta solo oggi che potesse dipendere dal tempo di estrazione, meglio tardi che mai e che sia farina del mio sacco...lo stesso vale per i kill...io conosco solo quel metodo, ce ne sono di più efficienti capisco dalla tua affermazione vero?

Per quanto riguarda il tempo d'attesa dell'estrazione, a me verrebbe in mente un timer. E' la soluzione più pulita?
aaa