Oppure

Loading
11/11/15 17:02
bgiorgio
Un saluto a tutto il forum, primo post.

Ho realizzato un applicativo in VB.NET (VS2010) che, tra le altre cose, genera dei file di testo in formato ASCII. Allego la parte del codice per la quale chiedo aiuto.

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '
        Dim sw As System.IO.StreamWriter

        Try

            ' Apre il file
            sw = New System.IO.StreamWriter("C:\Prova.txt")


            ' Scrive il contenuto
            sw.Write("Testo")


            ' Chiude il file
            sw.Close()


        Catch

            ' Intercetta l'errore.
            MsgBox("Si è verificato un errore durante la scrittura del file:")


        Finally
            ' Libera le risorse allocate con New.
            sw = Nothing


        End Try


    End Sub


Nulla di trascendentale e il codice funziona perfettamente su Win XP.

Anche su Win 8 funziona perfettamente se la directory non è "C:\".
Su questa directory invece, a causa delle restrizioni sui permessi di accesso, il programma sembra funzionare, ma scrive il file... in un'altra directory (C:\Users\<username>\AppData\...). Non voglio commentare la scelta opinabile di questo cambiamento rispetto ai SO precedenti, ma il vero problema è nel fare una cosa di questo tipo, non genera alcuna eccezione!

Come faccio a intercettare l'errore?

Grazie a chi vorrà essermi utile.

Giorgio
aaa
11/11/15 17:54
nessuno
Devi permettere al programma di scrivere solo nelle cartelle adatte, ProgramData e nella cartella dell'utente

Oppure esegui con privilegi di amministratore, vedi questo articolo

winfxitalia.com/script/167/…

ma non è consigliabile. E' meglio limitare le possibilità dell'utente.
Ultima modifica effettuata da nessuno 11/11/15 17:59
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à.
11/11/15 19:44
bgiorgio
Grazie Odisseo :rofl:

L'esecuzione come amministratore è esclusa, su questo concordiamo.

Immagina l'utente che deve salvare il file generato su disco: gli viene imposto di farlo nella "sua cartella". Mooolto restrittivo, ma forse anche sopportabile.

Ora immaginalo invece dover usare questo file nella macchina utensile che si trova all'altro lato della stanza. Fino a ieri salvava il file nello stick USB, lo staccava e lo inseriva nella macchina. Oggi cosa dovrebbe fare? Prima salvare il file nella sua cartella, poi aprire la sua cartella, aprire la cartella dello stick, trascinare il file (usando il touchpad...) e poi chiudere le finestre?
Come minimo mi tira dietro non solo il PC, ma anche la macchina utensile (che è molto più pesante...).

Visto che non ci dovrebbero essere restrizioni a salvare direttamente il file nello stick USB, a me andrebbe più bene lasciarglielo fare, ma voglio avvisarlo quando seleziona invece una cartella inappropriata ("C:\", tanto per dire).

Se ad esempio la macchina rispondesse sollevando un'eccezione al tentativo di scrivere su "C:\", non ci sarebbe nessun problema: si intercetta l'eccezione e si espone un bel MsgBox avvisando l'utente, ma... nessuna eccezione! Scrive da un'altra parte e basta.

Allora mi chiedo: conoscendo il path, è possibile verificare in anticipo se fa parte dei "luoghi proibiti"? Forse leggendo le abilitazioni per la specifica cartella? In questo caso, con quale classe?

Grazie in anticipo.

aaa
11/11/15 20:17
Roby94
Va bene la critica ma tra C:\ e una pennetta USB c'è giustamente una piccola differenza.
aaa
11/11/15 21:09
TheDarkJuster
Puoi usare le librerie di sistema per sapere il drive in cui è installato Windows e confrontarlo con la directory di salvataggio.
aaa
11/11/15 23:03
bgiorgio
@Roby94

Scusa, ma non ho capito cosa intendi. Ovvio che c'è differenza, nessuno la nega. Infatti accetto che non si debba scrivere su C:, ma non che non si possa farlo su una penna USB. Invece, più d'uno afferma che si deve salvare solo nella propria directory sotto AppData.

@TheDarkJuster

Ma la root del drive dove è installato Windows non è l'unica cartella vietata. Ci sono altre cartelle (tipo C:\Windows) dove è vietato scrivere. Come sapere quali sono quelle permesse?

Vediamo la cosa in modo diverso:
prendiamo un programma di sistema, forse il più semplice "Blocco Note". Se scrivo un testo e provo a salvarlo in una delle cartelle protette ("C:\", "C:\Windows\" o altre ancora) ottengo un avviso del tipo nella figura allegata, mentre se provo a salvarlo in un qualsiasi altro posto, l'operazione avviene con successo.

Ecco, vorrei ottenere lo stesso risultato. Qualcuno sa come fare?

Ultima modifica effettuata da bgiorgio 11/11/15 23:05
aaa
12/11/15 7:15
TheDarkJuster
Puoi salvare i dati nella usb senza essere amministratore. Comunque esiste un metodo per ricavare la cartella Windows, così come quella programmi.....
aaa
12/11/15 11:13
Ultimo
Postato originariamente da bgiorgio:

@Roby94

Scusa, ma non ho capito cosa intendi. Ovvio che c'è differenza, nessuno la nega. Infatti accetto che non si debba scrivere su C:, ma non che non si possa farlo su una penna USB. Invece, più d'uno afferma che si deve salvare solo nella propria directory sotto AppData.

@TheDarkJuster

Ma la root del drive dove è installato Windows non è l'unica cartella vietata. Ci sono altre cartelle (tipo C:\Windows) dove è vietato scrivere. Come sapere quali sono quelle permesse?

Vediamo la cosa in modo diverso:
prendiamo un programma di sistema, forse il più semplice "Blocco Note". Se scrivo un testo e provo a salvarlo in una delle cartelle protette ("C:\", "C:\Windows\" o altre ancora) ottengo un avviso del tipo nella figura allegata, mentre se provo a salvarlo in un qualsiasi altro posto, l'operazione avviene con successo.

Ecco, vorrei ottenere lo stesso risultato. Qualcuno sa come fare?



dovresti usare un SaveFileDialog, un esempio al seguente Link

msdn.microsoft.com/it-it/library/…
If ok Then GOTO Avanza else GOTO Inizia