+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

Elimina file, Copia file, Rinomina file

  1. #1
    TheRed27 non è in linea Novello
    Buon pomeriggio a tutti, mi si presenta un problema, ovvero quello di non poter eliminare, copiare, rinominare due determinati file, in breve spiego la mia intenzione su cosa deve accadere, ho un database basato su file xml, e una funzione di ripristino, all'apertura del form principale mi legge e scrive due file in due cartelle differenti e fin qui tutto bene, ma nell'evenienza che il file principale venga danneggiato vorrei recuperare i dati con una copia funzionante, ho provato a sviluppare questo codice, ma non mi esegue la funzione che mi serve: ovvero eliminare il file di origine originale (danneggiato), copiare nella directory del file di origine il file di backup e rinominarlo con lo stesso nome del file di origine danneggiato e poi riavviare l'applicazione... espongo la porzione di codice.

    Private xmlDataBaseData As String = My.Application.Info.DirectoryPath & "\Data\Orders.xml"
    Private xmlRestoreBaseData As String = My.Application.Info.DirectoryPath & "\Restore\_4F7264657273.rst"
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
           
            Try
                If My.Computer.FileSystem.FileExists(xmlDataBaseData) = True Then
                    XmlDataSet.ReadXml(xmlDataBaseData)
                End If
            Catch ex As Exception
                MsgBox("Origine dati corrotta o sintassi di allocazione degli elementi errata.", MsgBoxStyle.Critical)
                MsgBox("Il file XML è stato modificato da un editor, è sconsigliato manipolare gli elementi da un editor, lasciare che sia il database a gestire gli elementi.", MsgBoxStyle.Exclamation)
            End Try
            Dim RestoreRequiest = MessageBox.Show("Tentare il ripristino dell'origine dati con il backup automatico più recente?", "Attenzione", MessageBoxButtons.YesNo, MessageBoxIcon.Information)
            If RestoreRequiest = Windows.Forms.DialogResult.Yes Then
                Try
                    My.Computer.FileSystem.DeleteFile(xmlDataBaseData)
                    Dim restore As String = My.Application.Info.DirectoryPath & "\Restore\_4F7264657273.rst"
                    Dim data As String = My.Application.Info.DirectoryPath & "\Data\Orders.xml"
                    Dim RenameTo As String = "_4F7264657273.rst"
                    Dim Renamed As String = "Orders.xml"
                    My.Computer.FileSystem.CopyFile(restore, data)
                    My.Computer.FileSystem.RenameFile(RenameTo, Renamed)
                    MsgBox("Ripristino completato. L'applicazione verrà riavviata.", MsgBoxStyle.Information)
                    Application.Restart()
                Catch ex As Exception
                    MsgBox("Impossibile ripristinare l'origine dati.", MsgBoxStyle.Critical)
                End Try
            End If
            If RestoreRequiest = Windows.Forms.DialogResult.No Then
                MsgBox("Impossibile avviare l'applicazione, eliminare il file di dati o contattare l'amministratore di sistema.", MsgBoxStyle.Critical)
                Dim DeleteRequiest = MessageBox.Show("Eliminare l'origine dati? Attenzione tutti i dati memorizzati nella tabella, o nel programma a seconda dell'entità del danno verranno eliminati.", "Attenzione", MessageBoxButtons.YesNo, MessageBoxIcon.Information)
                If DeleteRequiest = Windows.Forms.DialogResult.OK Then
                    Try
                        My.Computer.FileSystem.DeleteFile(xmlDataBaseData)
                        MsgBox("Eliminazione completata. L'applicazione verrà riavviata.", MsgBoxStyle.Information)
                    Catch ex As Exception
                        MsgBox("Impossibile completare l'operazione, la directory o il file di dati non è accessibile. Contattare l'amministratore di sistema.", MsgBoxStyle.Critical)
                    End Try
                End If
                If DeleteRequiest = Windows.Forms.DialogResult.No Then
                    MsgBox("L'applicazione verrà terminata.", MsgBoxStyle.Critical)
                    Application.Exit()
                End If
            End If
    
           ...............
           ...............
    
       End Sub
    
    Confido il un vostro prezioso aiuto e in attesa di una risposta ringrazio anticipatamente.
    Distinti saluti

  2. #2
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Ci sono un po' di miscugli: MsgBox con MessageBox (dovresti cercare di usare solo queste ultime) e altri dettagli che potrebbero essere rivisti, ma restando sul pezzo, cosa è che va storto? Ti dà un errore? Se sì, quale? Eventualmente metti un breakpoint sul catch e controlla quale è lo ex.message.
    ℹ️ Leggi di più su alextyx ...

  3. #3
    TheRed27 non è in linea Novello
    alextyz, il primo vorrei ringraziarti per l'interessamento, in secondo ho risolto il problema ma vorrei chiederti un parere...

    Avendo la necessità di usare la condizione try all'interno di un'altra condizione try, ho provato ad annidare la seconda condizione nella prima in questo modo, la consideri una buona idea? ho fatto un test e tutto funziona correttamente, tu che dici?

    Imports Microsoft.VisualBasic
    Public Class Form1
    
        Private xmlDataBaseData As String = My.Application.Info.DirectoryPath & "\Data\Orders.xml"
        Private xmlRestoreBaseData As String = My.Application.Info.DirectoryPath & "\Restore\_4F7264657273.rst"
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Try
                If My.Computer.FileSystem.FileExists(xmlDataBaseData) = True Then
                    XmlDataSet.ReadXml(xmlDataBaseData)
                End If
            Catch innerex As Exception
                MsgBox("Origine dati corrotta o sintassi di allocazione degli elementi errata.", MsgBoxStyle.Critical)
                MsgBox("Il file XML è stato modificato da un editor, è sconsigliato manipolare gli elementi da un editor, lasciare che sia il database a gestire gli elementi.", MsgBoxStyle.Exclamation)
                Dim RestoreRequiest = MessageBox.Show("Tentare il ripristino dell'origine dati con il backup automatico più recente?", "Attenzione", MessageBoxButtons.YesNo, MessageBoxIcon.Information)
                If RestoreRequiest = Windows.Forms.DialogResult.Yes Then
                    Try
                        Dim Path As String = My.Application.Info.DirectoryPath
                        FileCopy(Path & "\Restore\_4F7264657273.rst", Path & "\Data\_4F7264657273.rst")
                        My.Computer.FileSystem.DeleteFile(Path & "\Data\Orders.xml")
                        My.Computer.FileSystem.RenameFile(Path & "\Data\_4F7264657273.rst", "Orders.xml")
                        MsgBox("Ripristino completato.", MsgBoxStyle.Information)
                        Application.Restart()
                    Catch outerex As Exception
                        MsgBox("Ripristino fallito, contattare l'amministratore di sistema.", MsgBoxStyle.Critical)
                    End Try
                End If
                If RestoreRequiest = Windows.Forms.DialogResult.No Then
                    MsgBox("Impossibile avviare l'applicazione se l'origine dati è corrotta, eseguire il ripristino o contattare l'amministratore di sistema.", MsgBoxStyle.Critical)
                    Application.Exit()
                End If
            End Try
    
            OrdersDataGridView.Columns(0).Visible = False
            OrdiniBindingSource.AddNew()
            OrdiniBindingSource.RemoveCurrent()
            PreventiviBindingSource.AddNew()
            PreventiviBindingSource.RemoveCurrent()
    
        End Sub
    
    In attesa di una tua risposta, porgo i miei saluti e ti ringrazio.
    Ultima modifica di TheRed27; 11-04-2015 01:24 

  4. #4
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Se magari specifichi come hai risolto, dopo aver spiegato il tipo di problema (dove e cosa accadeva), sarà utile per chi dovesse giungere su questa discussione.
    Per la seconda domanda, dovresti aprire un thread apposito, ma trattasi di domanda di dottrina abbastanza di base e forse non dovrebbe essere oggetto di discussione, quanto piuttosto di studio preventivo. In linea generale, una eccezione risale lo stack delle chiamate finchè non incontra un gestore che la intercetti. Quindi quelle verificatesi nel codice del try cath più interno, saranno intercettate correttamente da quello e non risaliranno oltre. Quindi sì, si possono nidificare i vari try catch, in modo da intercettare in maniera mirata eccezioni per certe porzioni di codice e magari, ad un livello superione si potranno intecettare tutte quelle che non sono state gestite, o perchè il tipo di gestore non le includeva, o perchè avvenute all'esterno dei blocchi Try Catch annidati.
    Comunque, tieni presente che per ogni argomento dovrebbe esser aperta una discussione apposita.
    ℹ️ Leggi di più su alextyx ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Copia righe da un file excel in un nuovo file
    Da ginopizza nel forum Microsoft Excel
    Risposte: 4
    Ultimo Post: 24-02-2020, 17:45
  2. Risposte: 0
    Ultimo Post: 18-08-2015, 08:41
  3. Risposte: 4
    Ultimo Post: 05-06-2014, 10:06
  4. Copia di alcune celle da file excel chiusi in un unico file
    Da luis6326 nel forum Microsoft Excel
    Risposte: 12
    Ultimo Post: 06-01-2012, 14:21
  5. Risposte: 3
    Ultimo Post: 07-11-2011, 13:28