Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.NET 2013 - percorso per spostamento file
Forum - C# / VB.NET - VB.NET 2013 - percorso per spostamento file

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
trattobasso (Normal User)
Pro


Messaggi: 89
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 21:30
Martedì, 25/03/2014
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

  1. 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.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:48
Martedì, 25/03/2014
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( )  ( http://msdn.microsoft.com/it-it/library/system.io.file.exi ... )

PM Quote
Avatar
trattobasso (Normal User)
Pro


Messaggi: 89
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 9:41
Mercoledì, 26/03/2014
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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:31
Mercoledì, 26/03/2014
A me funziona regolarmente. Se esegui questo codice

Codice sorgente - presumibilmente VB.NET

  1. Dim p1 As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments
  2.         Dim p2 As String = My.Computer.FileSystem.SpecialDirectories.ProgramFiles
  3.  
  4.         Console.WriteLine(p1)
  5.         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 il 26/03/2014 alle 10: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à.
PM Quote
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 14:14
Mercoledì, 26/03/2014
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

  1. Dim path As String
  2.         Dim o As New OpenFileDialog
  3.         If o.ShowDialog = Windows.Forms.DialogResult.OK Then
  4.             path = o.FileName
  5.             MsgBox(path & Environment.NewLine & My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp\Easy Weld.exe")
  6.         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).

PM Quote
Avatar
trattobasso (Normal User)
Pro


Messaggi: 89
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 15:10
Mercoledì, 26/03/2014
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

  1. System.IO.Directory.CreateDirectory((My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp"))
  2.         My.Computer.Network.DownloadFile("http://xxxxx/download/easy_weld/applicazione/Easy Weld.zip", (My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Easy Weld\Temp\Easy Weld.Zip"))
  3.         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""")
  4.         Dim processList() As Process
  5.         processList = Process.GetProcessesByName("Easy Weld.vshost")
  6.         processList = Process.GetProcessesByName("7z.exe")
  7.         For Each proc As Process In processList
  8.             proc.Kill()
  9.         Next
  10.         System.IO.File.Delete(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\Easy Weld.exe")
  11. 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

  1. 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?


trattobasso ha allegato un file: Immagine.jpg (22585 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:32
Mercoledì, 26/03/2014
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à.
PM Quote
Avatar
trattobasso (Normal User)
Pro


Messaggi: 89
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 17:10
Mercoledì, 26/03/2014
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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:30
Mercoledì, 26/03/2014
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.


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à.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo