Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] File e Win 8
Forum - C# / VB.NET - [VB.NET] File e Win 8

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
bgiorgio (Normal User)
Newbie


Messaggi: 9
Iscritto: 11/11/2015

Segnala al moderatore
Postato alle 18:02
Mercoledì, 11/11/2015
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.

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         '
  3.         Dim sw As System.IO.StreamWriter
  4.  
  5.         Try
  6.  
  7.             ' Apre il file
  8.             sw = New System.IO.StreamWriter("C:\Prova.txt")
  9.  
  10.  
  11.             ' Scrive il contenuto
  12.             sw.Write("Testo")
  13.  
  14.  
  15.             ' Chiude il file
  16.             sw.Close()
  17.  
  18.  
  19.         Catch
  20.  
  21.             ' Intercetta l'errore.
  22.             MsgBox("Si è verificato un errore durante la scrittura del file:")
  23.  
  24.  
  25.         Finally
  26.             ' Libera le risorse allocate con New.
  27.             sw = Nothing
  28.  
  29.  
  30.         End Try
  31.  
  32.  
  33.     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


> ESSE < - (Embedded Systems Software Engineer)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:54
Mercoledì, 11/11/2015
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

http://www.winfxitalia.com/script/167/Eseguire-Applicazion ...

ma non è consigliabile. E' meglio limitare le possibilità dell'utente.

Ultima modifica effettuata da nessuno il 11/11/2015 alle 18:59


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
bgiorgio (Normal User)
Newbie


Messaggi: 9
Iscritto: 11/11/2015

Segnala al moderatore
Postato alle 20:44
Mercoledì, 11/11/2015
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.



> ESSE < - (Embedded Systems Software Engineer)
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 21:17
Mercoledì, 11/11/2015
Va bene la critica ma tra C:\ e una pennetta USB c'è giustamente una piccola differenza.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1451
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:09
Mercoledì, 11/11/2015
Puoi usare le librerie di sistema per sapere il drive in cui è installato Windows e confrontarlo con la directory di salvataggio.

PM Quote
Avatar
bgiorgio (Normal User)
Newbie


Messaggi: 9
Iscritto: 11/11/2015

Segnala al moderatore
Postato alle 0:03
Giovedì, 12/11/2015
@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?



bgiorgio ha allegato un file: A1.png (7487 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da bgiorgio il 12/11/2015 alle 0:05


> ESSE < - (Embedded Systems Software Engineer)
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1451
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 8:15
Giovedì, 12/11/2015
Puoi salvare i dati nella usb senza essere amministratore. Comunque esiste un metodo per ricavare la cartella Windows, così come quella programmi.....

PM Quote
Avatar
Ultimo (Member)
Expert


Messaggi: 513
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 12:13
Giovedì, 12/11/2015
Testo quotato

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

https://msdn.microsoft.com/it-it/library/sfezx97z%28v=vs.11 ...


Ultimo (Hai voluto la bicicletta ? ....)

Studiare LINQ, WPF, ASP.NET MVC, Entity Framwork, C#, Blend, XAML, Javascript, HTML5, CSS .....(tanta roba)

https://www.dropbox.com/s/c2aots5x4urgbhf/setup_game_sudoku ...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:36
Giovedì, 12/11/2015
Testo quotato

Postato originariamente da Ultimo:
Dovresti usare un SaveFileDialog



E che c'entra questo?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo