PDA

View Full Version : [VB.NET 2010] Scrivere listbox su file txt


Ludo237
21-12-2010, 18:11
ciao ragazzi

allora io ho un form con una listbox che ci compila di items (10-15 items) in base a delle istruzioni che fa la form , perciò è tutto automatico
la listbox è una specie di log eventi del programma , tiene traccia di ciò che fa il programma.

fin qui funziona tutto

solo che ora vorrei che alla chiusura del form tutti gli items della listbox vengano salvati su un file (txt) con

- nome file = data_ora
- contenuto = tutti gli items della listbox

per ora ho fatto questo


Private Sub EsciToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EsciToolStripMenuItem.Click
For Each messaggio In LogBox.Items

Next
End Sub


lo so che è niente ,.. però non ho mai fatto operazioni su file eccetto su c/c++ con fstream :cry: :cry: :cry:

MarcoGG
21-12-2010, 19:14
solo che ora vorrei che alla chiusura del form tutti gli items della listbox vengano salvati su un file (txt) con

- nome file = data_ora
- contenuto = tutti gli items della listbox


Dim testoFile As New System.Text.StringBuilder
Dim nomeFile As String = DateTime.Now.ToString.Replace("/", "-") & ".txt"
For i As Integer = 0 To ListBox1.Items.Count - 1
testoFile.Append(ListBox1.Items(i).ToString & vbCrLf)
Next
My.Computer.FileSystem.WriteAllText(percorso & nomeFile, testoFile.ToString, False)

;)

Ludo237
22-12-2010, 08:53
Dim testoFile As New System.Text.StringBuilder
Dim nomeFile As String = DateTime.Now.ToString.Replace("/", "-") & ".txt"
For i As Integer = 0 To ListBox1.Items.Count - 1
testoFile.Append(ListBox1.Items(i).ToString & vbCrLf)
Next
My.Computer.FileSystem.WriteAllText(percorso & nomeFile, testoFile.ToString, False)

;)
:ave: :ave: :ave: :ave: :ave: :ave: :ave: :ave: MarcoGG:ave: :ave: :ave: :ave: :ave: :ave: :ave:
l'unica cosa che "percorso" non esiste e se provo a farlo diventare una variabile (contenente il path che mi server) mi dice che Testfile viene utilizzata prima di ricevere un valore

MarcoGG
22-12-2010, 10:31
Ma esattamente DOVE inizializzi percorso rispetto al mio codice ?

Ludo237
22-12-2010, 10:42
Ma esattamente DOVE inizializzi percorso rispetto al mio codice ?

se prendo e copio il tuo codice mi dice che la variabile percorso (ultima riga nella parentesi) non è dichiarata

allora la dichiaro prima di tutte.


dim percorso as string = "C:/...."

MarcoGG
22-12-2010, 10:55
Ah, ok.
Probabilmente rompe perchè non gli piace che testoFile sia vuoto.
Per maggior sicurezza risolvi così :

Dim percorso As String = Application.StartupPath & "\"
Dim testoFile As New System.Text.StringBuilder("")
Dim nomeFile As String = DateTime.Now.ToString.Replace("/", "-") & ".txt"
For i As Integer = 0 To ListBox1.Items.Count - 1
testoFile.Append(ListBox1.Items(i).ToString & vbCrLf)
Next
If testoFile.ToString <> "" Then My.Computer.FileSystem.WriteAllText(percorso & nomeFile, testoFile.ToString, False)

;)

Ludo237
22-12-2010, 10:59
se aggiungo


("")


dopo stringbuilder me lo sottolinea indicandomi "limiti di matrici non possono trovarsi negli identificatori del tipo":confused:

EDIT : NO SCUSA ho sbagliato a scrivere io il codice -.- MEA CULPA

Ludo237
22-12-2010, 11:03
l'unico problema che ho è il nome del file , sembra che 22-10-2010 12:03:00.txt per lui non sia corretto :doh:

MarcoGG
22-12-2010, 11:16
l'unico problema che ho è il nome del file , sembra che 22-10-2010 12:03:00.txt per lui non sia corretto :doh:

Sì chiaro, ho capito. Ha a che fare con le impostazioni locali.
Non puoi mettere i due-punti nel nome file. Nel mio caso invece mette il punto come separatore orario e funziona.
Tra un po' ti posto una mia Function ( appena la trovo ) che genera la stringa giusta a partire dalla data, e che taglia la testa al toro... ;)

MarcoGG
22-12-2010, 12:34
Ok, trovata ( non mi andava di riscriverla da capo... oggi mi sento pigro :p ) :
Public Function GetNomeFileTxt(ByVal D As DateTime) As String

Dim S As String

Dim Yr As String = D.Year.ToString
Dim Mh As String = D.Month.ToString.PadLeft(2, "0")
Dim Dy As String = D.Day.ToString.PadLeft(2, "0")
Dim hh As String = D.Hour.ToString.PadLeft(2, "0")
Dim mm As String = D.Minute.ToString.PadLeft(2, "0")
Dim ss As String = D.Second.ToString.PadLeft(2, "0")

S = Yr & "-" & Mh & "-" & Dy & "_" & hh & "." & mm & "." & ss & ".txt"
Return S

End Function

Perciò basta sostituire in :

Dim nomeFile As String = GetNomeFileTxt(DateTime.Now)

;)

Ludo237
22-12-2010, 13:15
Ok, trovata ( non mi andava di riscriverla da capo... oggi mi sento pigro :p ) :
Public Function GetNomeFileTxt(ByVal D As DateTime) As String

Dim S As String

Dim Yr As String = D.Year.ToString
Dim Mh As String = D.Month.ToString.PadLeft(2, "0")
Dim Dy As String = D.Day.ToString.PadLeft(2, "0")
Dim hh As String = D.Hour.ToString.PadLeft(2, "0")
Dim mm As String = D.Minute.ToString.PadLeft(2, "0")
Dim ss As String = D.Second.ToString.PadLeft(2, "0")

S = Yr & "-" & Mh & "-" & Dy & "_" & hh & "." & mm & "." & ss & ".txt"
Return S

End Function

Perciò basta sostituire in :

Dim nomeFile As String = GetNomeFileTxt(DateTime.Now)

;)

ma c'è qualcosa che non sai ?:read:

Grazie mille (di nuovo):D

Ludo237
22-12-2010, 14:35
Preferisco andare un attimo OT piuttosto che aprire un nuovo 3D solo per una domandina idiota

su una combobox dinamica creata in questo modo


Dim Email_ComboTable As New DataTable()
Connessione_SmsPanel.Open()
Adapter_Dirette_SmsPanel.Fill(Email_ComboTable)
Connessione_SmsPanel.Close()
Email_ComboBox.DataSource = Email_ComboTable
Email_ComboBox.DisplayMember = "email"
Email_ComboBox.ValueMember = "id_email"


io riesco a prelevare l'id di ogni opzione della combobox cosi


Dim id_email As Integer = Email_ComboBox.SelectedValue


però se volessi anche prelevare il valore ?
perchè cosi come scritto sopra io prelevo l'id_email ma se volessi anche prelevare l'effettiva email ? spero di essere stato chiaro

MarcoGG
22-12-2010, 15:57
Se parli di .SelectedValue ti riferisci all'item selezionato, perciò dal momento che la ComboBox, una volta eseguita la selezione "si chiude", la proprietà giusta dovrebbe essere semplicemente .Text .

Ludo237
22-12-2010, 17:24
yea it works :D (non ne dubitavo :mc: )

Ludo237
23-12-2010, 18:42
Ora sto facendo il procedimento inverso .. ovvero voglio caricare un file TXT e visualizzarlo
Utilizzo la classe OpenFileDialog ma non so come far visualizzare il file txt ... cioè posso utilizzare una listbox??? oppure c'è qualche altro metodo???

il codice che ho fatto per ora è questo

Private Sub Sfoglia_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Sfoglia_Button.Click
Dim myStream As Stream
Dim openFileDialog1 As New OpenFileDialog()

openFileDialog1.InitialDirectory = Application.StartupPath & "\"
openFileDialog1.Filter = "txt files (*.txt)|*.txt"

If openFileDialog1.ShowDialog() = DialogResult.OK Then
NomeFile_TextBox.Text = openFileDialog1.FileName
SmsPanel.LogBox.Items.Add(Now() & " Aperto il log eventi : " & openFileDialog1.FileName)
myStream = openFileDialog1.OpenFile()
If Not (myStream Is Nothing) Then
myStream.Close()
End If
End If
End Sub


Ci sono metodi migliori ?
nel "NomeFile_Textbox" mi mostra tutto il path , è possibile far vedere solo il nome del file?