
trattobasso (Normal User)
Pro
    
Messaggi: 89
Iscritto: 02/05/2007
|
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.
Codice sorgente - presumibilmente Plain Text |
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.... 
Cosa può essere questa volta? Vi chiedo cortesemente un piccolo aiuto.
Ciao e grazie in anticipo a tutti.
|
|

Poggi Marco (Member)
Guru
    
Messaggi: 969
Iscritto: 05/01/2010
|
|
|

trattobasso (Normal User)
Pro
    
Messaggi: 89
Iscritto: 02/05/2007
|
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?
|
|

()
Newbie
    
Messaggi:
Iscritto:
|
A me funziona regolarmente. Se esegui questo codice
Codice sorgente - presumibilmente VB.NET |
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 il 26/03/2014 alle 10:32 |
|

R0gerBlack (Member)
Expert
    
Messaggi: 210
Iscritto: 10/06/2010
|
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).
Codice sorgente - presumibilmente VB.NET |
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).
|
|

trattobasso (Normal User)
Pro
    
Messaggi: 89
Iscritto: 02/05/2007
|
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...
Codice sorgente - presumibilmente VB.NET |
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
Codice sorgente - presumibilmente Plain Text |
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?
|
|

()
Newbie
    
Messaggi:
Iscritto:
|
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 ...)
|
|

trattobasso (Normal User)
Pro
    
Messaggi: 89
Iscritto: 02/05/2007
|
ciao nessuno, ma è questo il bello, la differenza tra le tue 5 stelline e le mie
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?
|
|

()
Newbie
    
Messaggi:
Iscritto:
|
No.
Un Process è un oggetto che può essere completamente controllato e non solo avviato con Start.
Crea un oggetto Process a partire da quello che vuoi eseguire e controlla quando termina.
|
|