Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET -  [vb.net] scrittura file
Forum - C# / VB.NET - [vb.net] scrittura file

Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 11:00
Venerdì, 18/06/2010
dato questo codice:
Codice sorgente - presumibilmente VB.NET

  1. Public Sub CambiaOpzione(ByVal key As String, ByVal valore As String)
  2.         Dim fileSplittato As New List(Of String)
  3.         'Dim File As New IO.FileStream(pathFile, IO.FileMode.Open)
  4.  
  5.         Dim Reader As New IO.StreamReader(pathFile)
  6.  
  7.  
  8.         'Mette il file in una lista
  9.         Do While Not reader.EndOfStream
  10.             fileSplittato.Add(Reader.ReadLine)
  11.         Loop
  12.         Reader.Close()
  13.  
  14.         For i As Int16 = 0 To fileSplittato.Count - 1
  15.             If fileSplittato(i).IndexOf(key) = 0 Then
  16.                 fileSplittato(i) = String.Format("{0} = {1}", key, valore)
  17.             End If
  18.         Next
  19.  
  20.         Dim W As New IO.StreamWriter(pathFile)    'il problema sta qui
  21.         For Each Riga As String In fileSplittato
  22.             W.WriteLine(Riga)
  23.         Next
  24.         W.Close()
  25.  
  26.  
  27.     End Sub



mi da errore nella riga dove c'è scritto "il problema sta qui"
genera un'eccezione IOException con questa descrizione:

Il processo non può accedere al file 'C:\Documents and Settings\HP_Proprietario\Desktop\vb net\Ammisistrazione Chiosco\Ammisistrazione Chiosco\bin\Debug\setting\operazioni.opt' perché è in uso da un altro processo.

il file non è utilizzato da niente (credo).
inoltre quando apro il file per la lettura, poi lo kiudo.

sicuramente sarà qualcosa semplice ma che nn riesco a risolvere

grazie


PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:15
Venerdì, 18/06/2010
Ho provato il tuo codice, utilizzando un file txt con del testo a caso dentro... a me funziona tutto, nessun errore....

Quindi deduco che il file sia veramente utilizzato da qualche altra parte

PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 11:59
Venerdì, 18/06/2010
Testo quotato

Postato originariamente da Neo1986:

Ho provato il tuo codice, utilizzando un file txt con del testo a caso dentro... a me funziona tutto, nessun errore....

Quindi deduco che il file sia veramente utilizzato da qualche altra parte



chiedo scusa...dovevo essere + dettagliato:

la procedura funziona solo che io la uso all'interno di una classe:

pathName è una proprietà che viene impostata quando si crea l'oggetto...e quando la passo alla procedura mi da errore...è come se fosse usato il file da un processo all'interno della classe...nn so quale però se al posto di usare il percorso che metto alla creazione dell'oggetto, uso il percorso di un file esterno, allora funziona...ecco la classe:
Codice sorgente - presumibilmente VB.NET

  1. CClass Opzioni
  2.  
  3.     Public TabellaOpzione As New List(Of Options)
  4.     Private _pathFile As String
  5.  
  6.     Private Property pathFile() As String
  7.         Get
  8.             Return _pathFile
  9.         End Get
  10.         Set(ByVal value As String)
  11.             _pathFile = value
  12.         End Set
  13.     End Property
  14.  
  15.  
  16.     Public Sub CambiaOpzione(ByVal key As String, ByVal valore As String)
  17.         Dim fileSplittato As New List(Of String)
  18.         'Dim File As New IO.FileStream(pathFile, IO.FileMode.Open)
  19.  
  20.         Dim Reader As New IO.StreamReader(pathFile)
  21.  
  22.  
  23.         'Mette il file in una lista
  24.         Do While Not reader.EndOfStream
  25.             fileSplittato.Add(Reader.ReadLine)
  26.         Loop
  27.         Reader.Close()
  28.  
  29.         For i As Int16 = 0 To fileSplittato.Count - 1
  30.             If fileSplittato(i).IndexOf(key) = 0 Then
  31.                 fileSplittato(i) = String.Format("{0} = {1}", key, valore)
  32.             End If
  33.         Next
  34.  
  35.         Dim Writer As New IO.StreamWriter(pathFile)
  36.         For Each Riga As String In fileSplittato
  37.             Writer.WriteLine(Riga)
  38.         Next
  39.         Writer.Close()
  40.     End Sub
  41.  
  42.  
  43.     'Costruttore
  44.     Sub New(ByVal fileOpzioni As String)
  45.         pathFile = "c:\ciao.txt" 'fileOpzioni
  46.         CreaTabOpzioni()
  47.     End Sub
  48. End Class



Ultima modifica effettuata da foralobo il 18/06/2010 alle 12:08
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:35
Venerdì, 18/06/2010
Ma il programma non è solo in questa classe ... e tutto il resto?



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à.
PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 12:48
Venerdì, 18/06/2010
Testo quotato

Postato originariamente da nessuno:

Ma il programma non è solo in questa classe ... e tutto il resto?




se uso la procedura senza usare pathname, funziona...

PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 13:21
Venerdì, 18/06/2010
nessuno, credo che la tua riposta sia in funzione del fatto che ci possa essere il file aperto...

ed era cosi quindi la tua intuizione era giusta. Aprivo lo stesso file in lettura senza chiuderlo..

Domanda:

In questa procedura lo riapro..è normale che nn mi dia errore?

Domanda 2:

come si vede dalla procedura, il file lo riapro sempre in lettura, lo richiudo però poi quando cerco di riaprirlo in scrittura mi da errore...

Non vede la chiusura?

grazie

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:16
Venerdì, 18/06/2010
Testo quotato

Postato originariamente da foralobo:

nessuno, credo che la tua riposta sia in funzione del fatto che ci possa essere il file aperto...

ed era cosi quindi la tua intuizione era giusta. Aprivo lo stesso file in lettura senza chiuderlo..



Ecco perché si deve mostrare *tutto* il codice e non solo quello che si crede sbagliato.

Testo quotato

Domanda:

In questa procedura lo riapro..è normale che nn mi dia errore?



Può anche essere ... un file può essere aperto più volte in lettura.

Testo quotato

Domanda 2:

come si vede dalla procedura, il file lo riapro sempre in lettura, lo richiudo però poi quando cerco di riaprirlo in scrittura mi da errore...

Non vede la chiusura?



Ma il file era stato aperto *due volte*. L'ultima chiusura vale per la corrispondente apertura, non per *tutte* le aperture.

Se mostri *tutto* il codice in modo che si possa anche compilare ed eseguire, si capirà meglio la situazione.


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à.
PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 14:24
Sabato, 19/06/2010
Testo quotato

Postato originariamente da nessuno:
Ma il file era stato aperto *due volte*. L'ultima chiusura vale per la corrispondente apertura, non per *tutte* le aperture.

Se mostri *tutto* il codice in modo che si possa anche compilare ed eseguire, si capirà meglio la situazione.



avevo provato a chiuderlo + volte dove avevo fatto la chiusura delle seconda apertura...evidentemente non andava bene.

grazie tante per i kiarimenti cmq.

PM Quote