Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-04-2009, 14:33   #1
nardellu
Senior Member
 
L'Avatar di nardellu
 
Iscritto dal: Apr 2005
Città: SARDEGNA
Messaggi: 1861
[VB .NET] DirectoryInfo.GetDirectories(), problema accesso negato

vi posto una parte di codice di un programma che stò realizzando:

Codice:
dim path_primaria as string = "C:\users\utente\Documents"

      Dim rootInfo As DirectoryInfo = New DirectoryInfo(path_primaria)  
        Try
            For Each d As DirectoryInfo In rootInfo.GetDirectories("*.*", SearchOption.AllDirectories)
                'se non sono cartelle nascoste o di sistema le inserisce nell'array
                If (d.Attributes And IO.FileAttributes.Hidden) <> FileAttributes.Hidden Then
                    array_cartelle.Insert(a, d.FullName)
                End If
                a += 1
            Next

        Catch ex As UnauthorizedAccessException
'codice di gestione errore

        Catch ex As Exception
'codice di gestione errore

        End Try
si verifica il problema dell'accesso negato... cioè durante la chiamata rootInfo.GetDirectories("*.*", SearchOption.AllDirectories), se non si hanno le autorizzazioni si blocca...

ho provveduto con i catch a gestire il problema, ma il mio vero problema e che appena trova una cartella alla quale non può accedere, non continua il loop...

esempio su vista, nella cartella documents ci sono delle cartelle symboliche (video, musica, immagini ecc...) e mi si blocca li...

si può risolvere in qualche maniera? stò diventando scemo , e su google mi stò rincoglioxxxxx

any idea?
si potrebbe ovviare, oppure è un discorso morto?
__________________
Trattative OK non le conto più...Trattative non OK: Slashdot giuscone Kururu Paki deCri
nardellu è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 15:04   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da nardellu Guarda i messaggi
ho provveduto con i catch a gestire il problema, ma il mio vero problema e che appena trova una cartella alla quale non può accedere, non continua il loop...
Per forza, hai messo tutto il For Each nel blocco Try Catch. Prova mettendo solo l'istruzione che può sollevare l'eccezione.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 15:39   #3
nardellu
Senior Member
 
L'Avatar di nardellu
 
Iscritto dal: Apr 2005
Città: SARDEGNA
Messaggi: 1861
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Per forza, hai messo tutto il For Each nel blocco Try Catch. Prova mettendo solo l'istruzione che può sollevare l'eccezione.
scusami forse non mi sono spiegato bene...

l'errore di accesso negato, mi viene fuori durante l'inizio del ciclo...

anche se includo "try/catch" qui:
Codice:
'se non sono cartelle nascoste o di sistema le inserisce nell'array
                If (d.Attributes And IO.FileAttributes.Hidden) <> FileAttributes.Hidden Then
                    array_cartelle.Insert(a, d.FullName)
                End If
ottengo sempre l'errore perché è a monte di tale operazione...

mi servirebbe una soluzione che prosegua il ciclo anche quando il metodo rootInfo.GetDirectories("*.*", SearchOption.AllDirectories) restituisce un eccezione, in questo caso accesso negato alla cartella xxxxxx...
__________________
Trattative OK non le conto più...Trattative non OK: Slashdot giuscone Kururu Paki deCri
nardellu è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 15:56   #4
alex783
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 609
Lo sai che anch'io sto avendo eccezioni di Accesso negato quando provo a cancellare o rinominare directory?

Ecco il mio codice:

Codice:
if (Directory.Exists(this.ProfilePath[i, 1]))
{
	try
	{
		Directory.Move(this.ProfilePath[i, 1], this.ProfilePath[i, 1] + "OLD");
	}
	catch (Exception Error)
	{
		MessageBox.Show(this.NameOfProgram + "TryToRenameFolder *** \n" + Error.Message);	
	}
}
dove ProfilePath è un array che contiene il percorso di una cartella all'interno di C:\Users\blablabla\AppData\Roaming\

Ho il sospetto che sia Windows Search a bloccare a volte l'accesso alla cartella.

Infatti, reiterando i tentativi di accesso, l'operazione viene conclusa con successo. Alla fine, io ho risolto così (anche se non mi piace come metodo):

Codice:
TryToRenameFolder:
if (Directory.Exists(this.ProfilePath[i, 1]))
{
	try
	{
		Directory.Move(this.ProfilePath[i, 1], this.ProfilePath[i, 1] + "OLD");
		Thread.Sleep(200);
	}
	catch (Exception Error)
	{
		#if DEBUG
		MessageBox.Show(this.NameOfProgram + "TryToRenameFolder *** \n" + Error.Message);
		#endif
		TryToRenameFolderCounter = TryToRenameFolderCounter + 1;
		if (TryToRenameFolderCounter < 5)
		{
			goto TryToRenameFolder;
		}
		else MessageBox.Show("Sorry, there was an error. \n" + Error.Message);
	}
}
Su internet leggevo della possibilità di utilizzare l'istruzione CopyFileA delle API Win32, naturalmente in codice non gestito, in quanto dovrebbe essere in grado di accedere anche a file/cartelle bloccate da un altro processo. E' così?

Chiedo scusa all'autore del thread, ma credo che alla fine il problema sia praticamente lo stesso...

P.S: questo problema si verifica anche quando provo la mia applicazione in modalità Amministratore (uso Vista)
__________________
L'iPad? Potrebbe esserci gente che, pur d'avere il nuovo gadget, si mette a leggere i libri. Questa sì sarebbe una rivoluzione (Beppe Severgnini)

Ultima modifica di alex783 : 21-04-2009 alle 15:59.
alex783 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 16:03   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da nardellu Guarda i messaggi
scusami forse non mi sono spiegato bene...

l'errore di accesso negato, mi viene fuori durante l'inizio del ciclo...

anche se includo "try/catch" qui:
Codice:
'se non sono cartelle nascoste o di sistema le inserisce nell'array
                If (d.Attributes And IO.FileAttributes.Hidden) <> FileAttributes.Hidden Then
                    array_cartelle.Insert(a, d.FullName)
                End If
ottengo sempre l'errore perché è a monte di tale operazione...

mi servirebbe una soluzione che prosegua il ciclo anche quando il metodo rootInfo.GetDirectories("*.*", SearchOption.AllDirectories) restituisce un eccezione, in questo caso accesso negato alla cartella xxxxxx...
Secondo me non ne esci così. Devi crearti una funzione ricorsiva, che non usa SearchOption.AllDirectories, ma SearchOption.TopDirectoryOnly e ad ogni passaggio intercettare l'errore con Try Catch. Per il momento la vedo l'unica soluzione, ma mi riservo di provare più tardi...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 16:09   #6
nardellu
Senior Member
 
L'Avatar di nardellu
 
Iscritto dal: Apr 2005
Città: SARDEGNA
Messaggi: 1861
alex783, ho visto ciò che hai fatto, ed anche io ho già provato la tua soluzione senza risoluzione...

ma io ho anche individuato il problema esatto, che ne mio caso è la presenza di cartelle simboliche (collegamenti a cartelle) nella cartella documents in c:\users\nomeutente\

ad esempio dentro documents, c'è la cartella Video, che come icona su explorer ha il simbolo del collegamento e quando la Getdirectories() ci passa sopra ottengo il famoso messaggio "accesso negato...",

infatti mi servirebbe un qualcosa che ignori tale errore e prosegua con le altre cartelle... ma a stò punto dubito che esista dati gli innumerevoli 3ds senza risoluzione che ho letto su google...

potrebbe anche andar bene un metodo ricorsivo per ottenere in un altra maniera cartelle e sottocartelle, e ficcarle dentro un array...
__________________
Trattative OK non le conto più...Trattative non OK: Slashdot giuscone Kururu Paki deCri
nardellu è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 18:13   #7
nardellu
Senior Member
 
L'Avatar di nardellu
 
Iscritto dal: Apr 2005
Città: SARDEGNA
Messaggi: 1861
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Secondo me non ne esci così. Devi crearti una funzione ricorsiva, che non usa SearchOption.AllDirectories, ma SearchOption.TopDirectoryOnly e ad ogni passaggio intercettare l'errore con Try Catch. Per il momento la vedo l'unica soluzione, ma mi riservo di provare più tardi...
be ho risolto alla fine...

popolare l'array, e quando c'è l'eccezione rimuovere il valore...

Codice:
'ciclo cartelle principali della cartella principale
        For Each d As DirectoryInfo In rootInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)

            array_cartelle.Add(d.FullName)
            Dim rootInfo2 As DirectoryInfo = New DirectoryInfo(d.FullName)

            'scarta le cartelle di sistema e nascoste
            If d.Attributes <> FileAttributes.Hidden And FileAttributes.System Then
                'prova a ottenere tutte le sottocartelle
                Try
                    For Each d2 As DirectoryInfo In rootInfo2.GetDirectories("*", SearchOption.AllDirectories)
                        array_cartelle.Add(d2.FullName)
                    Next

                Catch ex As UnauthorizedAccessException
                    'se una directory provoca l'eccezzione di autorizzazioni rimuove dall'elenco cartelle
                    Dim remove_value = array_cartelle.Count - 1
                    MsgBox(Err.Description & " |" & remove_value)
                    array_cartelle.RemoveAt(remove_value

                End Try
                'fine if cartelle sistema/nascoste
            End If
            'fine ciclo cartelle principali
        Next
forse si può fare ancora meglio, ma funge alla grande e non sgarra 1 directory... che sia utile a qualcuno...
__________________
Trattative OK non le conto più...Trattative non OK: Slashdot giuscone Kururu Paki deCri

Ultima modifica di nardellu : 21-04-2009 alle 18:25.
nardellu è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 18:44   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Io invece l'ho fatta ricorsiva. La directory viene aggiunta all'ArrayList solo se non produce alcun errore d'accesso. Se una dir genera un'eccezione, mi ritrovo la descrizione completa di percorso dir in una ListBox... :

> ArrayList e Sub Ricorsiva :

Codice:
    Private arrayDirOk As ArrayList

    Private Sub TrovaCartelle(ByVal cartellaTop As String)

        Dim rootInfo As DirectoryInfo = New DirectoryInfo(cartellaTop)
        Try
            For Each D As DirectoryInfo In rootInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly)
                'If ... Condizioni ... 
                arrayDirOk.Add(D.FullName)
                'Rendo la Sub Ricorsiva
                TrovaCartelle(D.FullName)
            Next

        Catch ex As Exception
            lst_errori.Items.Add(ex.ToString())
        End Try

    End Sub
> Codice utilizzatore ( Button, ecc... ) :

Codice:
        lst_errori.Items.Clear()

        Dim cartellaTop As String = "C:\"
        arrayDirOk = New ArrayList
        TrovaCartelle(cartellaTop)
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 19:22   #9
nardellu
Senior Member
 
L'Avatar di nardellu
 
Iscritto dal: Apr 2005
Città: SARDEGNA
Messaggi: 1861
ottimo esempio, meno codice e meno risorse utilizzate...


utilizzerò il tuo esempio grazie...
__________________
Trattative OK non le conto più...Trattative non OK: Slashdot giuscone Kururu Paki deCri
nardellu è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2022, 18:31   #10
Giovanni G
Member
 
Iscritto dal: Jun 2018
Messaggi: 37
Una ottima soluzione (in inglese) si trova qui: https://firebird-vbnet.blogspot.com/...der-stops.html
Giovanni G è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2022, 14:50   #11
Giovanni G
Member
 
Iscritto dal: Jun 2018
Messaggi: 37
Quote:
Originariamente inviato da Giovanni G Guarda i messaggi
Una ottima soluzione (in inglese) si trova qui: https://firebird-vbnet.blogspot.com/...der-stops.html
Vedo che quel link non funziona più. Questo funziona:

https://firebird-vbnet.blogspot.com/...em-solved.html
Giovanni G è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Riceve il reso di una RTX 5090 da 4.000 ...
Gli utenti con GPU Intel non possono gio...
Un agente AI visita 5.000 siti dove un u...
IA, virtualizzazione e cyber resilienza:...
AMD aggiorna FSR alla versione 4.1. Migl...
Nuovi suffissi internet 2026: per la sec...
Claudy Day: tre vulnerabilità in ...
Record di efficienza per i pannelli sola...
SteamOS 3.8 è disponibile in ante...
Opel in Formula E dalla Stagione 13: con...
Windows 11 26H1: ecco le scadenze esatte...
Arriva HiSecEngine USG6000G, la nuova ga...
Xiaomi SU7 2026 ufficiale con 902 km di ...
Il tuo vecchio iPhone potrebbe essere gi...
Già disponibile un primo aggiorna...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v