Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [VB.NET] Copia File

  1. #1

    [VB.NET] Copia File

    Salve a tutti,
    tramite la classe "OpenFileDialog" copio un file da una cartella di origine ad una di destinazione.

    Il problema nasce quando cerco di copiare LO STESSO FILE, situato nella stessa cartella di origine, in questo caso mi viene restituito il seguente errore:

    "The process cannot access the file *** because it is being used by another process"

    Gli asterischi indicano il nome del file che ho selezionato. Io inserisco l'istruzione "try - catch" e il sistema mi riporta l'errore sopra citato, però poi mi permette di copiare ugualmnete il file.

    Vi chiedo allora come ovviare al problema, ovvero non far comparire questo messaggio di errore che poi alla fine non blocca l'esecuzione del programma, ma è comunque fastidioso. Vi riporto sotto il codice che uso e vi ringrazio per ogni suggerimento vogliate darmi:

    codice:
    With OpenFileDialog
    
        .CheckFileExists = True
        .ShowReadOnly = False
        .Filter = "Tutti i File|*.*|Jpeg File (*.jpg)|*.jpg|Bitmap Files (*.bmp)|*.bmp|Gif File (*.gif)|*.gif"
        .FilterIndex = 2
    
        If .ShowDialog = DialogResult.OK Then
    
           ' Estrapola ed assegna il nome del file
           Dim PathImmagine As String
           Dim LunghezzaTotale As Integer
           Dim LunghezzaPath As Integer
    
           LunghezzaTotale = Len(.FileName)
           TaglioInizio = .FileName.LastIndexOfAny(strChar) + 1
           PathImmagine = .FileName.Substring(0, TaglioInizio)
           LunghezzaPath = Len(PathImmagine)
           NomeImmagine = .FileName.Substring(LunghezzaPath, (LunghezzaTotale - LunghezzaPath))
    
           Try
    
              Dim FileOrigine As String = .FileName
              Dim FileDestinazione As String = PercorsoImmagine & "/" & NomeImmagine
              System.IO.File.Copy(FileOrigine, FileDestinazione, True)
    
           Catch ex As Exception
    
              Dim strMsg As String
              strMsg = "Errore di Sistema!" & vbCrLf
              strMsg += ex.Message
              MsgBox(strMsg, MsgBoxStyle.OKOnly.Critical)
    
           End Try
    
        End If
    
    End With
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464

    Re: [VB.NET] Copia File

    Originariamente inviato da Igor Baldacci
    Il problema nasce quando cerco di copiare LO STESSO FILE, situato nella stessa cartella di origine, in questo caso mi viene restituito il seguente errore
    Non ho capito...stai cercando di copiare un file sopra se stesso?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ciao, no è quello che vorrei evitare. Cioè se tento di "copiare un file sopra se stesso" mi ritorna quel messaggio di errore che ho indicato sopra e io non vorrei che mi venisse segnalato l'errore...

    non so se mi sono spiegato!

    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Originariamente inviato da Igor Baldacci
    Ciao, no è quello che vorrei evitare. Cioè se tento di "copiare un file sopra se stesso" mi ritorna quel messaggio di errore che ho indicato sopra e io non vorrei che mi venisse segnalato l'errore...
    Ti basta controllare che i percorsi del file sorgente e del file di destinazione siano diversi.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    oppure oltrepassare il try catch praticamente è come se facessi il vecchio on error resume next per capirci.

  6. #6
    mmmhh.. non ho mica capito bene sapete ... sarò l'ottavo nano: tontolo!

    Cioè in prativa devo mettere un controllo a monte che verifica che il file che sto cercando di copiare non è già presente?

    Il suggerimento di cassano invece non l'ho capito perchè non conosco la vecchia sintassi del VB...

    Pensavo invece che magari potrei proprio sfruttare proprio il try - cacth mettendo un controllo più specifico anzichè generico... devo solo trovarlo, al momento non so manco se esiste un controllo "ex" specifico per la copia di file già esistenti!

    Comunque uè ragazzi siete stai gentilissimi, alla prox!
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Originariamente inviato da Igor Baldacci
    Cioè in prativa devo mettere un controllo a monte che verifica che il file che sto cercando di copiare non è già presente?
    Nel tuo esempio ci sono due variabili, FileOrigine e FileDestinazione: accertandosi che siano differenti prima di eseguire la copia credo sia sufficiente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Credo di aver risolto come dici tu, ma usando l'sitruzione "File.Exist".

    Ti incollo il cuore del codice giusto per farti vedere, però mi rimane il cruccio iniziale. Ovvero come poter "inglobare" l'istruzione "IF file.exist(FileDestinazione) THEN" nel try - catch! Mi sembra più logico.

    Comunque così funziona alla grande.

    Ciao e grazie ancora.

    codice:
    Try
    
      If Not File.Exists(FileDestinazione) Then
    
         ' Copia Il file nella cartella di destinazione
         '
         System.IO.File.Copy(FileOrigine, FileDestinazione, True)
    
      Else
    
         Dim strMsg As String
         strMsg = "ATTENZIONE!" & vbCrLf
         strMsg += "Esiste già un file con lo stesso nome."
         MsgBox(strMsg, MsgBoxStyle.OKOnly.Critical)
    
      End If
    
    Catch ex As Exception
    
      Dim strMsg As String
      strMsg = "Errore di Sistema!" & vbCrLf
      strMsg += ex.Message
      MsgBox(strMsg, MsgBoxStyle.OKOnly.Critical)
    
    End Try
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  9. #9
    Utente di HTML.it L'avatar di daryl74
    Registrato dal
    Jun 2001
    Messaggi
    125
    Toglietemi una curiosità: il programma continua la sua esecuzione dopo aver eseguito l'istruzione
    codice:
    System.IO.File.Copy(FileOrigine, FileDestinazione, True)
    o aspetta che il file sia stato copiato completamente?

    Come faccio a sapere che la copia del file è finita senza dover eseguire dei "DIR nomefile" continuamente?

    Grazie

  10. #10
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    si ferma il thread.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.