Pliki
Transkrypt
Pliki
Microsoft Visual Basic Praca z plikami. Okna OpenFileDialog i SaveFileDialog, obiekty StreamReader i StreamWriter, odczyt i zapis (wierszami) całej zawartości pliku, przykład 1, wersja 1 Public Class Form1 ' ' Odczyt i zapis wierszami całej zawartości pliku z wykorzystaniem pola listy. ' Private Sub btnCzytaj_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnCzytaj.Click ' ' Otwarcie okna poszukiwania pliku do odczytu dlgOtworz.ShowDialog() End Sub Private Sub dlgOtworz_FileOk(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) Handles dlgOtworz.FileOk ' ' Odczyt zawartości pliku do pola listy, wierszami, do końca pliku. Dim srCzytnik As System.IO.StreamReader Dim strKom, strTyt As String Dim strWiersz As String Try ' ' Otwarcie do odczytu pliku wybranego w oknie dialogowym srCzytnik = New System.IO.StreamReader(dlgOtworz.FileName) ' ' Pokazanie ścieżki dostępu do pliku txtSciezka.Text = dlgOtworz.FileName ' ' Odczyt całej zawartości pliku wierszami i dodanie ' każdego wiersza do listy jako jej nowego elementu Do While Not srCzytnik.EndOfStream strWiersz = srCzytnik.ReadLine lstPlik.Items.Add(strWiersz) Loop ' ' Zwolnienie zasobów srCzytnik.Close() srCzytnik.Dispose() Catch ex As Exception strKom = ex.Message strTyt = "Odczyt z pliku " & dlgZapisz.FileName 1 MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _ MessageBoxIcon.Error) End Try End Sub Private Sub btnWyczysc_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnWyczysc.Click ' ' Czyszczenie listy i pola tekstowego ścieżki do pliku lstPlik.Items.Clear() txtSciezka.Clear() End Sub Private Sub btnZapisz_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnZapisz.Click ' ' Otwarcie okna dialogowego, w którym zostanie określone, ' do którego pliku ma zostać zapisana zawartość listy dlgZapisz.ShowDialog() End Sub Private Sub dlgZapisz_FileOk(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) Handles dlgZapisz.FileOk ' ' Zapisywanie w kolejnych rekordach pliku zawartości listy, ' zgodnie z ustawieniem pola trybu (dopisywanie/zastępowanie) Dim strElement As String Dim strKom, strTyt As String Dim swPisak As System.IO.StreamWriter ' Try ' ' Otwarcie pliku do zapisu swPisak = New System.IO.StreamWriter(dlgZapisz.FileName, _ cbDopisz.Checked) ' ' Pokazanie ścieżki dostępu do pliku txtSciezka.Text = dlgOtworz.FileName ' ' Wpisanie do pliku całej zawartości listy For Each strElement In lstPlik.Items swPisak.WriteLine(strElement) Next ' ' Zwolnienie zasobów i wyczyszczenie pola nowego elementu listy txtNowyWiersz.Clear() ' swPisak.Close() swPisak.Dispose() Catch ex As Exception strKom = ex.Message strTyt = "Zapis do pliku " & dlgZapisz.FileName MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _ MessageBoxIcon.Error) End Try End Sub Private Sub btnDodajWiersz_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnDodajWiersz.Click ' ' Dodanie do listy nowego wiersza i wyczyszczenie pola ścieżki do pliku txtSciezka.Clear() lstPlik.Items.Add(txtNowyWiersz.Text) End Sub End Class 2 Microsoft Visual Basic Praca z plikami. Okna OpenFileDialog i SaveFileDialog, obiekty StreamReader i StreamWriter, odczyt i zapis (wierszami) całej zawartości pliku, przykład 1, wersja 2 Public Class frmCzytanieZapis ' ' Odczyt i zapis wierszami całej zawartości pliku ' z wykorzystaniem wielowierszowgo pola tekstowego. Private Sub btnWyczysc_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnWyczysc.Click ' ' Czyszczenie pola zawartości i pola tekstowego ścieżki do pliku txtZawartosc.Clear() txtSciezka.Clear() End Sub Private Sub btnCzytaj_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnCzytaj.Click ' ' Otwarcie okna dialogowego wyboru odczytywanego pliku dlgOtworz.ShowDialog() End Sub Private Sub dlgOtworz_FileOk(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles dlgOtworz.FileOk ' ' Odczyt zawartości pliku do wielowierszowego pola tekstowego Dim srCzytnik As System.IO.StreamReader Dim Wiersz As String Dim Kom, Tyt As String ' Try srCzytnik = New System.IO.StreamReader(dlgOtworz.FileName) ' txtSciezka.Text = dlgOtworz.FileName ' Do While Not srCzytnik.EndOfStream 3 Wiersz = srCzytnik.ReadLine ' ' Jeżeli pole jest puste, pierwszy wiersz pliku ' będzie wpisany do jego pierwszego wiersza If txtZawartosc.Text = "" Then txtZawartosc.Text = Wiersz Else ' ' Jeżeli w polu już coś zapisano, każdy przeczytany ' wiersz pliku musi być zapisany w nowym wierszu ' pola (przejście do nowego wiersza: vbCrLf) txtZawartosc.Text = txtZawartosc.Text & vbCrLf & Wiersz End If Loop srCzytnik.Close() srCzytnik.Dispose() Catch ex As Exception Kom = ex.Message Tyt = "Czytanie zawartości pliku" MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, _ MessageBoxIcon.Error) End Try End Sub Private Sub btnZapisz_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnZapisz.Click ' ' Otwarcie okna wyboru pliku do zapisu dlgZapisz.ShowDialog() End Sub Private Sub dlgZapisz_FileOk(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles dlgZapisz.FileOk ' ' Zapis zawartości wielowierszowego pola tekstowego do pliku Dim swPisak As System.IO.StreamWriter Dim Kom, Tyt As String ' Try swPisak = New System.IO.StreamWriter(dlgZapisz.FileName, _ cbDopisz.Checked) txtSciezka.Text = dlgZapisz.FileName swPisak.WriteLine(txtZawartosc.Text) ' swPisak.Close() swPisak.Dispose() Catch ex As Exception Kom = ex.Message Tyt = "Zapis do pliku" MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, _ MessageBoxIcon.Error) End Try End Sub End Class 4 Microsoft Visual Basic Praca z plikami. Okna OpenFileDialog i SaveFileDialog, obiekty StreamReader i StreamWriter, przykład 2 Public Class Form1 ' ' Rozwiązywanie równania kwadratowego przy użyciu współczynników zapisanych w kolejnych ' wierszach pliku tekstowego oraz zapisywanie rozwiązania do pliku tekstowego. ' Private Sub btnWczytaj_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnWczytaj.Click ' ' Otwarcie okna wyboru pliku ze współczynnikami równania dlgOdczyt.ShowDialog() End Sub Private Sub dlgOdczyt_FileOk(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) Handles dlgOdczyt.FileOk ' ' Otwarcie pliku ze współczynnikami równania ' i wczytanie ich do pól tekstowych formularza Dim strKom, strTyt As String Dim srDane As System.IO.StreamReader Try srDane = New System.IO.StreamReader(dlgOdczyt.FileName) txtA.Text = srDane.ReadLine txtB.Text = srDane.ReadLine txtC.Text = srDane.ReadLine ' ' Zamknięcie i usunięcie zbędnego obiektu StreamReader srDane.Close() srDane.Dispose() ' ' Wyczyszczenie pól tekstowych pierwiastków txtX1.Clear() txtX2.Clear() Catch ex As Exception strKom = ex.Message strTyt = "Błąd wykonania nr " & Err.Number MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub btnRozwiaz_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnRozwiaz.Click ' ' Rozwiązanie równania kwadratowego i wpisanie pierwiastków ' do pól tekstowych formularza Dim sngA, sngB, sngC As Single Dim delta, X1, X2 As Single Dim strKom, strTyt As String ' Try sngA = CSng(txtA.Text) If sngA = 0 Then strKom = "Współczynnik A nie może być zerem" strTyt = "Błędne dane" MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _ 5 MessageBoxIcon.Warning) Exit Sub End If sngB = CSng(txtB.Text) sngC = CSng(txtC.Text) ' delta = sngB ^ 2 - 4 * sngA * sngC If delta >= 0 Then X1 = (-sngB - Math.Sqrt(delta)) / (2 * sngA) X2 = (-sngB + Math.Sqrt(delta)) / (2 * sngA) txtX1.Text = X1.ToString txtX2.Text = X2.ToString Else strKom = "Brak rozwiązań w dziedzinie rzeczywistej" strTyt = "Delta < 0" MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _ MessageBoxIcon.Information) End If Catch ex As Exception strKom = ex.Message strTyt = "Błąd wykonania nr " & Err.Number MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub btnZapisz_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnZapisz.Click ' ' Otwarcie okna wyboru pliku do zapisu (tylko wtedy, gdy uzyskano ' rozwiązanie i zapisano je do pól tekstowych formularza) Dim strKom, strTyt As String If txtX1.Text <> "" Then dlgZapis.ShowDialog() Else strKom = "Brak znalezionego rozwiązania równania" strTyt = "Brak danych do zapisu" MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _ MessageBoxIcon.Asterisk) End If End Sub Private Sub dlgZapis_FileOk(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) Handles dlgZapis.FileOk ' ' Zapis rozwiązania do pliku (z zachowywaniem dotychczasowej ' zawartości pliku, o ile istnieje) Dim swZapis As System.IO.StreamWriter Dim strWierszZapisu As String Dim strKom, strTyt As String ' Try swZapis = New System.IO.StreamWriter(dlgZapis.FileName, True) ' strWierszZapisu = "Równanie kwadratowe " & txtA.Text & "*x^2 + " & _ txtB.Text & "*x + " & txtC.Text & " = 0 " swZapis.WriteLine(strWierszZapisu) ' strWierszZapisu = "X1 = " & txtX1.Text swZapis.WriteLine(strWierszZapisu) ' strWierszZapisu = "X2 = " & txtX2.Text swZapis.WriteLine(strWierszZapisu) ' ' Usunięcie zbędnego obiektu StreamWriter swZapis.Close() swZapis.Dispose() Catch ex As Exception strKom = ex.Message strTyt = "Błąd wykonania nr " & Err.Number MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub End Class 6