Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
671,47 KB
Nội dung
THỰC HÀNH TUẦN I/O STREAM MỤC ĐÍCH I - Cung cấp khả khởi tạo, đọc, viết khả cập nhật File - Hiểu luồng thông tin (Stream) C# - Có thể sử dụng lớp FileStream, lớp StreamReader lớp BinaryFormatter để đọc viết đối tượng vào File II NỘI DUNG Luồng (Stream) luồng thông tin, chứa thông tin chuyển qua, tập tin (File) để lưu trữ thông tin, liệu; chí giữ lại liệu sau chương trình kết thúc Dữ liệu truyền theo hai hướng - Đọc liệu : đọc liệu từ bên vào chương trình - Ghi liệu: đưa liệu từ chương trình bên Có đối tượng Stream: - Console.In: Trả đối tượng Stream đưa vào chuẩn - Console Out: Trả đối tượng Stream lấy chuẩn - Console Error: Trả đối tượng Stream thông báo lỗi chuẩn Khoa Mạng máy tính truyền thông Trang Thứ tự việc đọc/ghi tập tin Khi đọc hay viết tập tin, cần thiết phải theo trình tự xác định Đầu tiên phải thực công việc mở tập tin Nếu tạo tập tin, việc mở tập tin lúc với việc tạo tập tin Khi tập tin mở, cần thiết phải tạo cho luồng để đặt thông tin vào tập tin lấy thông tin từ tập tin Khi tạo luồng, cần thiết phải thông tin trực tiếp qua luồng Sau tạo luồng gắn với tập tin, lúc thực việc đọc ghi liệu tập tin Khi thực việc đọc thông tin từ tập tin, cần thiết phải kiểm tra xem trỏ tập tin tới cuối tập tin chưa, tức đọc đến cuối tập tin hay chưa Khi hoàn thành việc đọc ghi thông tin tập tin tập tin cần phải đóng lại Tóm lại bước để làm việc với tậo tin là: Bước 1: Mở hay tạo tập tin Bước 2: Thiết lập luồng ghi hay đọc từ tập tin Bước 3: Đọc hay ghi liệu lên tập tin Bước 4: Đóng lập tin lại Có nhiều luồng (stream) khác Chúng ta sử dụng luồng khác phương thức khác phụ thuộc vào kiểu liệu bên tập tin Trong phần này, việc đọc/ghi thực tập tin văn tập tin nhị phân Thông tin nhị phân bao hàm khả mạnh lưu trữ giá trị số kiểu liệu khác FileStream : Là lớp dẫn xuất từ Stream, sử dụng đọc viết liệu vào file hay đọc viết liệu từ file Ví dụ: FileStream fs = new FileStream(FileName, mode); Trong đó: - FileName: tập tin mà muốn truy xuất đến - Mode: chế độ mở file (Append, Create, CreateNew, Open, OpenOrCreate…) Ex: FileStream fs = new FileStream(“thuchanh.txt”, FileMode.CreateNew); Khoa Mạng máy tính truyền thông Trang StreamReader: lớp dẫn xuất từ Stream, luồng đọc tập tin Để đọc file ta dùng lớp StreamReader Để ghi file ta dùng lớp StreamWriter Đây lớp dùng để viết ghi tập tin dạng văn StreamReader sr = new StreamReader(FileStream fileName); StreamWriter sw = new StreamReader(FileStream fileName); Ví dụ: StreamReader sr = new StreamReader(fs); BinaryStream: Nếu sử dụng tập tin văn bản, lưu liệu kiểu số phải thực việc chuyển đổi sang dạng chuỗi ký tự để lưu vào tập tin văn lấy ta lấy giá trị chuỗi ký tự ta phải chuyển sang dạng số Đôi muốn có cách thức tốt để lưu trực tiếp giá trị vào tập tin sau đọc trực tiếp giá trị từ tập tin Ví dụ: viết số lượng lớn số integer vào tập tin số nguyên, ta đọc giá trị số integer Trường hợp chúng viết vào tập tin với dạng văn bản, đọc ta phải đọc văn phải chuyển giá trị từ chuỗi đến số integer Tốt việc phải thực thêm bước chuyển đổi, ta gắn kiểu luồng nhị phân BinaryStream vào tập tin, sau đọc ghi thông tin nhị phân từ luồng Ghi chú: Thông tin nhị phân thông tin định dạng kiểu lưu trữ liệu Ví dụ: FileStream fs = new FileStream(sfd.FileName,FileMode.CreateNew); BinaryWriter bw = new BinaryWriter(fs); BinaryFormatter: sử dụng phương thức Serialize Deserialize để viết đọc đối tượng từ luồng: Serialize: chuyển đổi đối tượng sang định dạng, viết vào File mà không liệu Deserialize: đọc liệu định dạng từ File chuyển dạng ban đầu Ví dụ: Khoa Mạng máy tính truyền thông Trang Serialize BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream fileName = File.Create(" \\student.txt"); binaryFormatter.Serialize(fileName, st); Deserialize BinaryFormatter bf = new BinaryFormatter(); FileStream fs = File.OpenRead(" \\student.txt"); Student student = (Student)bf.Deserialize(fs); III BÀI TẬP MẪU Bài Viết chương trình đọc file sau: Khi nhấn vào button btnRead đếm thông báo số dòng có tập tin Hình minh họa Gợi ý: bắt kiện cho nút btnRead, sử dụng lớp StreamReader private void btnRead_Click(object sender, System.EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); FileStream fs = new FileStream(ofd.FileName, FileMode.OpenOrCreate); StreamReader sr = new StreamReader(fs); Khoa Mạng máy tính truyền thông Trang int lineCount = 0; while (sr.ReadLine() != null) { lineCount++; } fs.Close(); MessageBox.Show("There are " + lineCount + " lines in " + ofd.FileName); } Bài Viết chương trình ghi thành file nhị phân Hình minh họa Gợi ý: bắt kiện cho nút btnWrite, sử dụng BinaryWriter private void btnWrite_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.ShowDialog(); FileStream fs = new FileStream(sfd.FileName, FileMode.CreateNew); BinaryWriter bw = new BinaryWriter(fs); int[] myArray = new int[1000]; for (int i = 0; i < 1000; i++) { myArray[i] = i; bw.Write(myArray[i]); } bw.Close(); } Bài 3: Tạo Class Student với thành phần sau: public class Student{ public String lastName; // Họ Khoa Mạng máy tính truyền thông Trang public String firstName; // Tên public int age; // Tuổi } Viết chương trình chuyển đổi đối tượng Student sang định dạng nhị phân, ghi vào tập tin student.txt nhấn nút BinarySerialize hình mẫu Sau đọc liệu định dạng từ tập tin student.txt chuyển dạng ban đầu Serialize Deserialize Gợi ý: Sử dụng BinaryFormater private void button1_Click(object sender, EventArgs e) { Student st = new Student(); st.lastName = "Tôn"; st.firstName = "Loan"; st.age = 22; BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream fileName = File.Create(" \\student.txt"); binaryFormatter.Serialize(fileName, st); fileName.Close(); Khoa Mạng máy tính truyền thông Trang MessageBox.Show("Serialize succesful!", "Info"); } private void button2_Click(object sender, EventArgs e) { BinaryFormatter bf = new BinaryFormatter(); FileStream fs = File.OpenRead(" \\student.txt"); Student student = (Student)bf.Deserialize(fs); fs.Close(); MessageBox.Show("Student Name is " + student.firstName); } [Serializable()] public class Student{ public String lastName; public String firstName; public int age; } Lưu ý: - Phải đặt [Serializable()] trước đối tượng cần chuyển đổi - Tập tin student.txt mặc định lưu vào thư mục bin project Bài 4: Tạo form đăng nhập có tên đăng nhập mật khẩu, không check vào ô Ghi nhớ, nhấn đăng nhập liệu ghi vào file txt 0; có check lưu user, pass số vào dòng lien tiếp Khoa Mạng máy tính truyền thông Trang Hướng dẫn: // Trong hàm load Form lên { FileStream fs; if (!File.Exists("D://Pass.txt”)) { fs = new FileStream("D://Pass.txt", FileMode.Create); StreamWriter sWriter = new StreamWriter(fs, Encoding.UTF8); sWriter.WriteLine("Hello World!"); sWriter.Flush(); fs.Close(); } //Trong hàm click button { FileStream fs = new FileStream("D://Pass.txt", FileMode.Create); StreamWriter writeFile = new StreamWriter(fs, Encoding.UTF8);//dùng streamwriter để ghi file if (RememberCheck.Checked == true)//nếu checkbox checked nhớ tên mật { writeFile.WriteLine(txtUser.Text); writeFile.WriteLine(txtPass.Text); writeFile.WriteLine("1");//dòng "1" để kiểm tra có checked hay không writeFile.Flush();//ghi dòng vào file Pass.txt } else writeFile.WriteLine("0");//dòng "0" không checked vào checkbox writeFile.Close(); } Khoa Mạng máy tính truyền thông Trang IV BÀI TẬP THỰC HÀNH TẤT CẢ CÁC BÀI TẬP DƯỚI ĐÂY ĐỀU SỬ DỤNG WINDOWS FORM APPLICATION Bài 5: Nhập nhiều đoạn văn vào Textbox ghi xuống file “input.txt’ Đọc nội dung file “input.txt” xuất hình using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; System.IO; namespace bai5_lab2 { Khoa Mạng máy tính truyền thông Trang public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { FileStream fs; if (!File.Exists("E://Pass.txt")) { fs = new FileStream("E://Pass.txt", FileMode.Create); StreamWriter sWriter = new StreamWriter(fs, Encoding.UTF8); sWriter.WriteLine("Hello World!"); sWriter.Flush(); fs.Close(); } } private void btn_ghi_Click(object sender, EventArgs e) { FileStream fs = new FileStream("E://Pass.txt", FileMode.Create); StreamWriter writeFile = new StreamWriter(fs, Encoding.UTF8);//dùng streamwriter để ghi file writeFile.WriteLine(txt_noidung.Text); writeFile.Flush();//ghi dòng vào file Pass.txt writeFile.Close(); MessageBox.Show("Da Ghi Thanh Cong"); } private void btn_doc_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://Pass.txt"); txt_noidung.Clear(); txt_noidung.Text = "Nội Dung Đã Ghi \n \n"+sr.ReadToEnd(); nội dung file sr.Close(); MessageBox.Show("Da Doc Thanh Cong"); } } } Khoa Mạng máy tính truyền thông //Đọc toàn Trang 10 Bài 6: Đọc nội dung từ file “input.txt” với nội dung theo định dạng, sau thực phép tính ghi kết xuống file “output.txt” Ví dụ : Nội dung file “input.txt” : +2 12 –7 10 *20 200 /10 Nội dung file “output.txt” +2 = Khoa Mạng máy tính truyền thông Trang 11 12 –7 = 10 *20 = 200 200 /10 = 200 using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; System.IO; namespace bai6_lab2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Khoa Mạng máy tính truyền thông Trang 12 private void button4_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://input.txt"); string s = sr.ReadToEnd(); richTextBox1.Text = s; } private void button3_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://input.txt"); string string string string s1 s2 s3 s4 = = = = ""; ""; ""; ""; s1 = sr.ReadLine(); string [] s11 ; s11 = s1.Split('+'); float tong1 = float.Parse(s11[0]) + float.Parse(s11[1]); s2 = sr.ReadLine(); string[] s22; s22 = s2.Split('-'); float tong2 = float.Parse(s22[0]) - float.Parse(s22[1]); s3 = sr.ReadLine(); string[] s33; s33 = s3.Split('*'); float tong3 = float.Parse(s33[0]) * float.Parse(s33[1]); s4 = sr.ReadLine(); string[] s44; s44 = s4.Split('/'); float tong4 = float.Parse(s44[0]) / float.Parse(s44[1]); FileStream fs = new FileStream("E://output.txt", FileMode.Create); StreamWriter writeFile = new StreamWriter(fs, Encoding.UTF8);//dùng streamwriter để ghi file writeFile.WriteLine(s1 + " = writeFile.WriteLine(s2 + " = writeFile.WriteLine(s3 + " = writeFile.WriteLine(s4 + " = writeFile.Flush();//ghi writeFile.Close(); " + tong1.ToString()); " + tong2.ToString()); " + tong3.ToString()); " + tong4.ToString()); dòng vào file Pass.txt string ss1 = s1 + "=" + tong1.ToString(); string ss2 = s2 + "=" + tong2.ToString(); string ss3 = s3 + "=" + tong3.ToString(); richTextBox1.Text = ss1 + "\n" + ss2 + "\n" + ss3; MessageBox.Show("Da Ghi Thanh Cong"); } Khoa Mạng máy tính truyền thông Trang 13 } } Bài 7: Viết chương trình sử dụng BinaryFormatter cho phép : Nhập mảng học viên (chú ý nhập không nhập giá trị DTB ) ghi xuống file “input.txt” Cấu trúc Học Viên sau : MSSV : String HoTen : String DienThoai : String DiemToan : float Khoa Mạng máy tính truyền thông Trang 14 DiemVan :float DTB : float -Đọc thông tin mảng Học Viên từ file “input.txt” tính điểm trung bình cho học viên sau ghi xuống file “output.txt” xuất hình Ví dụ: Cấu trúc file “input.txt” 1234567 NguyenVanA 1234567890 7.0 6.0 1234568 NguyenVanB 1234567891 8.0 8.0 Cấu trúc file “output.txt” 1234567 NguyenVanA 1234567890 7.0 6.0 6.5 1234568 NguyenVanB 1234567891 8.0 8.0 8.0 Khoa Mạng máy tính truyền thông Trang 15 using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; System.IO; namespace bai7_lab2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //FileStream fs = new FileStream("E://Bai7_input.txt", FileMode.Create); //StreamReader sr = new StreamReader(fs, Encoding.UTF8); //string line = ""; //float dtb = 0; //List hs1 = new List(); //while (sr.ReadLine() != null) //{ // hocsinh hs = new hocsinh(); Khoa Mạng máy tính truyền thông Trang 16 // // line = sr.ReadLine(); hs.mssv = line; // // line = sr.ReadLine(); hs.hoten = line; // // line = sr.ReadLine(); hs.diemtoan = float.Parse(line); // // line = sr.ReadLine(); hs.diemvan = float.Parse(line); // //} hs1.Add(hs); } public class hocsinh { public string mssv; public string hoten; public string dienthoai; public float diemtoan; public float diemvan; public float dtb; } public string s = null; private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://bai7_input.txt"); s = sr.ReadToEnd(); sr.Close(); StreamWriter writeFile = new StreamWriter("E://bai7_input.txt");//dùng streamwriter để ghi file //StreamWriter writeFile = new StreamWriter("E://Bai7_input.txt");//dùng streamwriter để ghi file writeFile.WriteLine(s); writeFile.WriteLine(textBox1.Text); writeFile.WriteLine(textBox2.Text); writeFile.WriteLine(textBox3.Text); writeFile.WriteLine(textBox4.Text); writeFile.WriteLine(textBox5.Text); writeFile.Flush(); writeFile.Close(); MessageBox.Show("Thanh cong"); } Khoa Mạng máy tính truyền thông Trang 17 //hocsinh[] hs = new hocsinh [100]; hocsinh hs = new hocsinh(); private void button2_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://bai7_input.txt"); //s = sr.ReadToEnd(); string line float dtb = int i = 1; string s1 = while((line { = null; 0; null; = sr.ReadLine()) != null ) string mssv = " "; mssv = line; string hoten = " "; hoten = sr.ReadLine(); string dienthoai = null; dienthoai = sr.ReadLine(); string diemtoan = null; diemtoan = sr.ReadLine(); string diemvan = null; diemvan = sr.ReadLine(); sr.ReadLine(); float a = float.Parse(diemtoan); float b = float.Parse(diemvan); dtb = (a + b) / 2; //label6.Text += mssv.ToString(); //richTextBox1.Text =mssv.ToString(); //StreamReader sr = new StreamReader("E://bai7_input.txt"); richTextBox1.Text += dtb.ToString(); StreamWriter writeFile = new StreamWriter("E://vyvananh.txt"); writeFile.WriteLine(s1); writeFile.WriteLine(mssv); writeFile.WriteLine(hoten); writeFile.WriteLine(dienthoai); writeFile.WriteLine(diemtoan); writeFile.WriteLine(diemvan); writeFile.WriteLine(dtb.ToString()); writeFile.Flush(); writeFile.Close(); i++; StreamReader sr1 = new StreamReader("E://vyvananh.txt"); s1 = sr1.ReadToEnd(); sr1.Close(); } //label6.Text += line; } private void button3_Click(object sender, EventArgs e) { richTextBox1.Clear(); StreamReader sr = new StreamReader("E://bai7_input.txt"); s = sr.ReadToEnd(); Khoa Mạng máy tính truyền thông Trang 18 sr.Close(); richTextBox1.Text += s; } private void button4_Click(object sender, EventArgs e) { richTextBox1.Clear(); StreamReader sr = new StreamReader("E://vyvananh.txt"); s = sr.ReadToEnd(); sr.Close(); richTextBox1.Text += s; } } } Khoa Mạng máy tính truyền thông Trang 19 Khoa Mạng máy tính truyền thông Trang 20 Khoa Mạng máy tính truyền thông Trang 21 Khoa Mạng máy tính truyền thông Trang 22 [...]... hs1.Add(hs); } public class hocsinh { public string mssv; public string hoten; public string dienthoai; public float diemtoan; public float diemvan; public float dtb; } public string s = null; private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://bai7_input.txt"); s = sr.ReadToEnd(); sr.Close(); StreamWriter... writeFile.Close(); i++; StreamReader sr1 = new StreamReader("E://vyvananh.txt"); s1 = sr1.ReadToEnd(); sr1.Close(); } //label6.Text += line; } private void button3_Click(object sender, EventArgs e) { richTextBox1.Clear(); StreamReader sr = new StreamReader("E://bai7_input.txt"); s = sr.ReadToEnd(); Khoa Mạng máy tính và truyền thông Trang 18 sr.Close(); richTextBox1.Text += s; } private void button4_Click(object... System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; System .IO; namespace bai6_lab2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Khoa Mạng máy tính và truyền thông Trang 12 private void button4_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://input.txt");... truyền thông Trang 15 using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; System .IO; namespace bai7_lab2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //FileStream fs = new FileStream("E://Bai7_input.txt ",. .. string ss3 = s3 + "=" + tong3.ToString(); richTextBox1.Text = ss1 + "\n" + ss2 + "\n" + ss3; MessageBox.Show("Da Ghi Thanh Cong"); } Khoa Mạng máy tính và truyền thông Trang 13 } } Bài 7: Viết chương trình sử dụng BinaryFormatter cho phép : Nhập 1 mảng c c h c viên (chú ý khi nhập không nhập giá trị c a DTB ) và ghi xuống file “input.txt” C u tr c của H c Viên như sau : MSSV : String HoTen : String... writeFile.WriteLine(textBox4.Text); writeFile.WriteLine(textBox5.Text); writeFile.Flush(); writeFile.Close(); MessageBox.Show("Thanh cong"); } Khoa Mạng máy tính và truyền thông Trang 17 //hocsinh[] hs = new hocsinh [100]; hocsinh hs = new hocsinh(); private void button2_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("E://bai7_input.txt"); //s = sr.ReadToEnd(); string line float dtb = int i = 1; string s1... DiemToan : float Khoa Mạng máy tính và truyền thông Trang 14 DiemVan :float DTB : float -Đ c thông tin mảng H c Viên từ file “input.txt” và tính điểm trung bình cho từng h c viên sau đó ghi xuống file “output.txt” và xuất ra màn hình Ví dụ: C u tr c file “input.txt” 1234567 NguyenVanA 1234567890 7.0 6.0 1234568 NguyenVanB 1234567891 8.0 8.0 C u tr c file “output.txt” 1234567 NguyenVanA 1234567890... += s; } private void button4_Click(object sender, EventArgs e) { richTextBox1.Clear(); StreamReader sr = new StreamReader("E://vyvananh.txt"); s = sr.ReadToEnd(); sr.Close(); richTextBox1.Text += s; } } } Khoa Mạng máy tính và truyền thông Trang 19 Khoa Mạng máy tính và truyền thông Trang 20 Khoa Mạng máy tính và truyền thông Trang 21 Khoa Mạng máy tính và truyền thông Trang 22 ... float.Parse(s44[0]) / float.Parse(s44[1]); FileStream fs = new FileStream("E://output.txt ", FileMode.Create); StreamWriter writeFile = new StreamWriter(fs, Encoding.UTF8);//dùng streamwriter để ghi file writeFile.WriteLine(s1 + " = writeFile.WriteLine(s2 + " = writeFile.WriteLine(s3 + " = writeFile.WriteLine(s4 + " = writeFile.Flush();//ghi từng writeFile.Close(); " + tong1.ToString()); " + tong2.ToString());... InitializeComponent(); //FileStream fs = new FileStream("E://Bai7_input.txt ", FileMode.Create); //StreamReader sr = new StreamReader(fs, Encoding.UTF8); //string line = ""; //float dtb = 0; //List hs1 = new List(); //while (sr.ReadLine() != null) //{ // hocsinh hs = new hocsinh(); Khoa Mạng máy tính và truyền thông Trang 16 // // line = sr.ReadLine(); hs.mssv = line; // // line = sr.ReadLine(); ... đ c ghi liệu tập tin Khi th c vi c đ c thông tin từ tập tin, c n thiết phải kiểm tra xem trỏ tập tin tới cuối tập tin chưa, t c đ c đến cuối tập tin hay chưa Khi hoàn thành vi c đ c ghi thông tin. .. vi c đ c/ ghi tập tin Khi đ c hay viết tập tin, c n thiết phải theo trình tự x c định Đầu tiên phải th c công vi c mở tập tin Nếu tạo tập tin, vi c mở tập tin l c với vi c tạo tập tin Khi tập tin. .. m , c n thiết phải tạo cho luồng để đặt thông tin vào tập tin lấy thông tin từ tập tin Khi tạo luồng, c n thiết phải thông tin tr c tiếp qua luồng Sau tạo luồng gắn với tập tin, l c th c việc