59 messaggi dal 21 luglio 2006
Buongiorno a tutti,
avrei necessità di un aiuto, ho un file di testo con il quale popolo un DataGridView, vorrei tramite il DataGridView, modificare, cancellare, aggiungere record nel suddetto file di testo. Per momento ho creato una Sub per cancellare un record dal file di testo con il seguente codice:
 
If DGVDatiMail.Rows.GetRowCount(DataGridViewElementStates.Selected) = 1 Then
            Dim indselez As Integer = DGVDatiMail.CurrentRow.Index
            Dim NOrd As Integer = DGVDatiMail.Rows(indselez).Cells(0).Value()
            Dim ReadString As Array
            Dim fileString As String

            Using fr As StreamReader = New StreamReader(dirApplicationData & "\DatiMail.txt")
                Do
                    fileString = fr.ReadLine
                    fr.Close()
                    ReadString = fileString.Split("#").ToArray
                    If NOrd <> ReadString(0) Then
                        Dim fileOgg As StreamWriter = New StreamWriter(dirApplicationData & "\DatiMail.txt", False)
                        fileOgg.WriteLine(fileString)
                        fileOgg.Close()
                    End If

                Loop Until fileString Is Nothing
            End Using
        Else
            MsgBox("Selezionare la riga da cancellare", MsgBoxStyle.Exclamation)
        End If

Praticamente seleziono la riga da cancellare nel datagridview e con il codice sopra individuo il recordo selezionato nel file di testo e salto la scrittura dello stesso e proseguo nella lettura e scrittura dei successivi record.
Il problema è che non riesco a gestire la chiusura e apertura del file di testo, segnalandomi errore. Spero di essere stato chiaro.
Qualche suggerimento?
Grazie
Giorgio

Giorgio
181 messaggi dal 10 agosto 2019
posta l'errore completo ed eventuale altro codice collegato
135 messaggi dal 01 febbraio 2017
gsprogetti ha scritto:
Buongiorno a tutti,
avrei necessità di un aiuto, ho un file di testo con il quale popolo un DataGridView, vorrei tramite il DataGridView, modificare, cancellare, aggiungere record nel suddetto file di testo. Per momento ho creato una Sub per cancellare un record dal file di testo con il seguente codice:
 
If DGVDatiMail.Rows.GetRowCount(DataGridViewElementStates.Selected) = 1 Then
            Dim indselez As Integer = DGVDatiMail.CurrentRow.Index
            Dim NOrd As Integer = DGVDatiMail.Rows(indselez).Cells(0).Value()
            Dim ReadString As Array
            Dim fileString As String

            Using fr As StreamReader = New StreamReader(dirApplicationData & "\DatiMail.txt")
                Do
                    fileString = fr.ReadLine
                    fr.Close()
                    ReadString = fileString.Split("#").ToArray
                    If NOrd <> ReadString(0) Then
                        Dim fileOgg As StreamWriter = New StreamWriter(dirApplicationData & "\DatiMail.txt", False)
                        fileOgg.WriteLine(fileString)
                        fileOgg.Close()
                    End If

                Loop Until fileString Is Nothing
            End Using
        Else
            MsgBox("Selezionare la riga da cancellare", MsgBoxStyle.Exclamation)
        End If

Praticamente seleziono la riga da cancellare nel datagridview e con il codice sopra individuo il recordo selezionato nel file di testo e salto la scrittura dello stesso e proseguo nella lettura e scrittura dei successivi record.
Il problema è che non riesco a gestire la chiusura e apertura del file di testo, segnalandomi errore. Spero di essere stato chiaro.
Qualche suggerimento?
Grazie
Giorgio

A prima vista sembra che stai tentando di leggere e scrivere allo stesso momento lo stesso file, senza nessuna politica di blocco.
Prova a scrivere su un file temporaneo, ed alla fine fai un semplice copy/rename nel nome originario.

Facci sapere.
Ciao.
Gino.

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]
59 messaggi dal 21 luglio 2006
Ciao SensoBit,
Si in effetti è come dici tu, ho quindi modificato il codice nel seguente modo:
 If DGVDatiMail.Rows.GetRowCount(DataGridViewElementStates.Selected) = 1 Then
            Dim indselez As Integer = DGVDatiMail.CurrentRow.Index
            Dim NOrd As Integer = DGVDatiMail.Rows(indselez).Cells(0).Value()
            Dim ReadString As Array
            Dim fileString As String
            Dim rstream As StreamReader
            Dim wstream As StreamWriter
            If DGVDatiMail.RowCount > 1 Then
                Dim streamR As FileStream = New FileStream(dirApplicationData & "\DatiMail.txt", FileMode.Open, FileAccess.Read)
                Dim streamW As FileStream = New FileStream(dirApplicationData & "\DatiMail.tmp", FileMode.Create, FileAccess.Write)
                rstream = New StreamReader(streamR)
                wstream = New StreamWriter(streamW)

                Do Until rstream.EndOfStream
                    fileString = rstream.ReadLine
                    ReadString = fileString.Split("#").ToArray
                    If NOrd <> ReadString(0) Then
                       wstream.WriteLine(fileString)
                    End If
                Loop

                streamR.Close()
                streamW.Close()

                My.Computer.FileSystem.DeleteFile(dirApplicationData & "\DatiMail.txt")
                My.Computer.FileSystem.RenameFile(dirApplicationData & "\DatiMail.tmp", "DatiMail.txt")
            Else
                My.Computer.FileSystem.DeleteFile(dirApplicationData & "\DatiMail.txt")
            End If

Solo che non riesco a capire perchè non scrive nel file temporaneo "DatiMail.tmp", dove sbaglio?
Grazie
Giorgio

Giorgio
135 messaggi dal 01 febbraio 2017
Il codice in oggetto, avulso dal contesto, non è di aiuto nell'indagine ulteriore. Pertanto se vuoi altre risposte (come ti avevano già chiesto), cerca di circostanzaire meglio lo scenario.
Infine non scrive cosa ? Esce con un errore ? Se si quale ?
Pappapronta per tutti.
;-)

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]
59 messaggi dal 21 luglio 2006
Ho gia risolto, i due file .txt e .tmp non stati chiusi regolarmente. Per quanto riguarda "la pappapronta" ti volevo far presente che la "pappa" l'ho preparata io, non mi sembra che tu abbia messo nessun "condimento" in più.
Grazie
Modificato da gsprogetti il 29 aprile 2020 09:49 -

Giorgio
135 messaggi dal 01 febbraio 2017
gsprogetti ha scritto:
Ho gia risolto, i due file .txt e .tmp non stati chiusi regolarmente. Per quanto riguarda "la pappapronta" ti volevo far presente che la "pappa" l'ho preparata io, non mi sembra che tu abbia messo nessun "condimento" in più.
Grazie
Modificato da gsprogetti il 29 aprile 2020 09:49 -

Sarebbe stato corretto allora dare feedback a chi ha cercato di aiutarti ...

Ne terro conto in futuro, no, nn mi ringraziare, ringrazio io per la lezione ricevuta.
Una buona giornata.

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.