Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB.NET] Negato l'accessso a certe cartelle. E l'esecuzione si interrompe

    Ciao a a tutti,
    sto costruendo un software che ricerca file e cartelle. Tutto bene, ma a un certo punto il debugger mi dice che l'accesso a certe cartelle è negato, e l'esecuzione si interrompe.
    Ho risolto il problema manualmente usando la funzione 'directory.delete(path)', ma è inutile dire che il mio software deve risolvere la cosa automaticamente.
    Ho pensato di risolvere il problema con l'aiuto delle clausole 'try-catch' e usando sempre la funzione 'directory.delete(path)' nel predicato 'Catch'. Non so come fare. Potete aiutarmi?
    Grazie mille.
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Quote Originariamente inviata da giorgiogio48 Visualizza il messaggio
    sto costruendo un software che ricerca file e cartelle. Tutto bene, ma a un certo punto il debugger mi dice che l'accesso a certe cartelle è negato, e l'esecuzione si interrompe.
    Se l'errore non viene opportunamente "gestito", è ovvio che l'operazione si interrompe, probabilmente a causa di una opportuna eccezione.

    Quote Originariamente inviata da giorgiogio48 Visualizza il messaggio
    Ho risolto il problema manualmente usando la funzione 'directory.delete(path)'
    Quindi il tuo software non cerca file e cartelle, bensì li elimina!

    Quote Originariamente inviata da giorgiogio48 Visualizza il messaggio
    ma è inutile dire che il mio software deve risolvere la cosa automaticamente.
    Dipende da cosa intendi per "risolvere", e da quello che il tuo software deve fare, perché nel dettaglio ancora non si è capito.

    Quote Originariamente inviata da giorgiogio48 Visualizza il messaggio
    Ho pensato di risolvere il problema con l'aiuto delle clausole 'try-catch'
    Quelle servono a intercettare l'eccezione sollevata a fronte della condizione imprevista costituita dal negato accesso alle cartelle e ai file, però poi è quello che scrivi all'interno che conta, e questo dipende anche dall'obiettivo del software.

    Quote Originariamente inviata da giorgiogio48 Visualizza il messaggio
    Non so come fare. Potete aiutarmi?
    Spiega quello che stai cercando di fare, e come lo stai facendo, magari postando una porzione rilevante del codice, e forse avremo quantomeno qualche informazione utile per provare ad abbozzare dei suggerimenti in merito.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Grazie per l'intervento. No alka, l'eccezione è gestita. Ma il problema permane
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Quote Originariamente inviata da giorgiogio48 Visualizza il messaggio
    Grazie per l'intervento. No alka, l'eccezione è gestita. Ma il problema permane
    L'eccezione è gestita ma il problema permane, quindi è gestita male.

    Non pubblichi altri dettagli né hai risposto ai dubbi esposti, quindi evidentemente non ti serve una mano.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Ecco. La funzione che interessa è questa. Non interviene più il debugger perchè, come ho detto, ho eliminato a mano le cartelle a cui era negato l'accesso
    codice:
     Public Sub ExtractAssociatedIconEx1()
            Try
                Dim folderName As String = Nothing
                If (Environment.GetCommandLineArgs.Length > 1) Then
                    folderName = Environment.GetCommandLineArgs(1)
    
                End If
    
    
                ' Get the c:\ directory.
    
    
                If RadioButton1.Checked = True Then
    
                    lstResults.Items.Clear()
                    lstResults.LargeImageList = ImageList1
                    lstResults.SmallImageList = ImageList1
                    lstResults.View = View.List
    
                    Dim dirInfo As DirectoryInfo
                    Dim fileInfo As FileInfo
                    Dim exeIcon As System.Drawing.Icon
                    Dim sh As New NativeMethods.SHFILEINFO
    
                    dirInfo = New DirectoryInfo("C:\Users\giorg\Documents\")
    
                    For Each fileInfo In dirInfo.GetFiles("*" & TextBox1.Text & "*", SearchOption.AllDirectories)
                        ImageList1.ColorDepth = ColorDepth.Depth32Bit
                        sh = NativeMethods.GetInfoFromShell(fileInfo.FullName)
                        If (Not String.IsNullOrEmpty(fileInfo.Extension)) Then
    
                            exeIcon = CType(System.Drawing.Icon.FromHandle(sh.hIcon).Clone, Icon)
    
    
                            ImageList1.ColorDepth = ColorDepth.Depth32Bit
                            sh = NativeMethods.GetInfoFromShell(fileInfo.FullName)
                            If (Not String.IsNullOrEmpty(fileInfo.Extension)) Then
    
                                exeIcon = CType(System.Drawing.Icon.FromHandle(sh.hIcon).Clone, Icon)
    
                                If (ImageList1.Images.ContainsKey(fileInfo.Name)) Then
                                    lstResults.Items.Add(fileInfo.FullName, fileInfo.FullName)
                                ElseIf (Not exeIcon Is Nothing) Then
                                    ImageList1.Images.Add(fileInfo.FullName, exeIcon)
                                    lstResults.Items.Add(fileInfo.FullName, fileInfo.FullName)
                                Else
                                    lstResults.Items.Add(fileInfo.FullName)
                                End If
    
                            End If
                        End If
                    Next
    
                Else
                    lstResults.Items.Clear()
                    lstResults.LargeImageList = ImageList1
                    lstResults.SmallImageList = ImageList1
                    lstResults.View = View.List
    
                    Dim dirInfo As DirectoryInfo
                    Dim fileInfo As FileInfo
                    Dim exeIcon As System.Drawing.Icon
                    Dim sh As New NativeMethods.SHFILEINFO
    
                    dirInfo = New DirectoryInfo("C:\Users\giorg\Documents\")
    
                    For Each fileInfo In dirInfo.GetFiles("*" & TextBox1.Text & "*", SearchOption.AllDirectories)
                        ImageList1.ColorDepth = ColorDepth.Depth32Bit
                        sh = NativeMethods.GetInfoFromShell(fileInfo.FullName)
                        If (Not String.IsNullOrEmpty(fileInfo.Extension)) Then
    
                            exeIcon = CType(System.Drawing.Icon.FromHandle(sh.hIcon).Clone, Icon)
    
    
                            ImageList1.ColorDepth = ColorDepth.Depth32Bit
                            sh = NativeMethods.GetInfoFromShell(fileInfo.FullName)
                            If (Not String.IsNullOrEmpty(fileInfo.Extension)) Then
    
                                exeIcon = CType(System.Drawing.Icon.FromHandle(sh.hIcon).Clone, Icon)
    
                                If (ImageList1.Images.ContainsKey(fileInfo.Name)) Then
                                    lstResults.Items.Add(fileInfo.FullName, fileInfo.FullName)
                                ElseIf (Not exeIcon Is Nothing) Then
                                    ImageList1.Images.Add(fileInfo.FullName, exeIcon)
                                    lstResults.Items.Add(fileInfo.FullName, fileInfo.FullName)
                                Else
                                    lstResults.Items.Add(fileInfo.FullName)
                                End If
    
                            End If
                        End If
                    Next
    
                End If
    
    
    
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    
    
    
    
        End Sub
    Ultima modifica di alka; 01-06-2022 a 09:06 Motivo: Usato il tag corretto per formattare il codice
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    E secondo te con una cosa così:

    End If

    End If
    End If
    Next

    End If

    noi riusciamo a capire il flusso del codice ???

    Devi racchiudere il codice tra i tag corretti, è il pulsante con il "#"

  7. #7
    La routine è quella. Non capisco il tuo commento
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Quote Originariamente inviata da giorgiogio48 Visualizza il messaggio
    La routine è quella. Non capisco il tuo commento
    Il codice si formatta con l'apposito tag CODE, non usando QUOTE: ho modificato io il messaggio in modo opportuno.
    In caso contrario, il codice non è indentato e quindi non si capisce nulla.

    Detto questo, bene per il codice, ma non capisco qual è il contesto in cui si verifica l'errore, non capisco qual è la tua gestione (visualizzare l'errore nella MsgBox sarebbe?), non capisco dove si trovata l'istruzione che hai menzionato all'inizio con la quale eliminavi una directory e cosa ha a che fare con questa parte di codice, che generalmente sembrerebbe mostrare delle icone estratte da file ma, nella pratica, meriterebbe comunque un approfondimento.

    Tra l'altro, almeno a prima vista, le due parti di logica If/Then/Else che hai inserito nel punto in cui si trova If RadioButton1.Checked = True Then sembrano essere identiche. Quindi l'If a che diavolo servirebbe?

    Ripeto le domande già fatte: cosa dovrebbe fare questo codice? dove e quando si verifica l'errore? che tipo di errore è?
    Ultima modifica di alka; 01-06-2022 a 09:13
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Riepilogando, se ho capito bene:
    1. il tuo codice si blocca nel momento in cui tenti di accedere ad una cartella per la quale non hai i permessi di accesso
    2. *al momento* il problema non si verifica più perché hai cancellato le suddette cartelle che si trovano sotto la cartella "C:\Users\giorg\Documents\" (no comment sul metodo con cui hai risolto, non oso pensare a una cartella tipo C:\WINDOWS )
    3. Adesso il problema è che non riesci a riprodurre il problema per via della soluzione adottata al punto 2

    Quindi direi:
    a. per riprodurre il problema, prova semplicemente a cambiare cartella d'attacco
    b. quando si presenta l'errore, semplicemente skippa la cartella (passa cioè alla prossima, ignorando l'errore)

Tag per questa discussione

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.