1. Trang chủ
  2. » Thể loại khác

Chương 8 Ghi/₫ọc dữ liệu của ứng dụng C# ra file

53 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 246,77 KB

Nội dung

Chương Ghi/₫ọc liệu ứng dụng C# file 8.0 Dẫn nhập 8.1 Tổng quát ₫ời sống liệu ứng dụng VC# 8.2 Các cấp ₫ộ ghi/₫ọc liệu phổ biến 8.3 Ghi/₫ọc chuỗi byte thô ra/từ file 8.4 Ghi/₫ọc chuỗi ký tự ra/từ file 8.5 Ghi/₫ọc liệu có kiểu ₫ịnh sẵn ra/từ file nhị phân 8.6 Ghi/₫ọc liệu có kiểu ₫ịnh sẵn ra/từ file văn 8.7 Ghi/Đọc hệ thống ₫ối tượng ra/vào file 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng 8.9 Kết chương Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.0 Dẫn nhập   Chương giới thiệu ₫ối tượng phục vụ ghi/₫ọc liệu ra/vào file tác vụ ghi/₫ọc liệu cổ ₫iển ra/vào file Chương giới thiệu ₫ối tượng phục vụ ghi/₫ọc hệ thống ₫ối tượng ra/vào file tác vụ ghi/₫ọc hệ thống ₫ối tượng có mối quan hệ tham khảo phức tạp ra/vào file Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.1 Tổng quát ₫ời sống liệu  ứng dụng VC#  Nhu cầu ghi/₫ọc nội dung biến liệu thường rơi vào tình yếu sau ₫ây : Lưu kết phiên làm việc hành ₫ể dùng lại cho phiên làm việc Nhập nhiều liệu cho phần mềm Xuất nhiều liệu cho người dùng Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.2 Các cấp ₫ộ ghi/₫ọc liệu phổ biến ghi/₫ọc chuỗi byte thô ra/từ file, ngữ nghĩa byte chương trình tự qui ₫ịnh ghi/₫ọc chuỗi ký tự theo cách mã hóa xác ₫ịnh (ASCII, UTF8, UCS2, ) ra/từ file ghi/₫ọc liệu thuộc kiểu ₫ịnh sẵn bool, byte, int, double, String, ra/từ file theo dạng nhị phân, dạng mã hóa gốc bên chương trình giải mã liệu thuộc kiểu ₫ịnh sẵn bool, byte, int, double, String, thành chuỗi văn bản, ghi chuỗi file văn ₫ể cần ₫ọc chuỗi văn từ file vào chương trình, mã hóa chuỗi file thành liệu nhị phân bên chương trình trước xử lý tiếp 5.ghi/₫ọc ₫ối tượng ₫ối tượng ₫ược tham khảo trực tiếp hay gián tiếp ₫ối tượng gốc ra/từ file nhị phân hay file XML Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.3 Ghi/₫ọc chuỗi byte thô ra/từ file    class sử dụng : FileStream tác vụ : WriteByte(), ReadByte() Qui trình ghi ₫iển sau : //1 tạo ₫ối tượng quản lý file ₫ể ghi liệu FileStream oFile = new FileStream("C:\\data.bin", FileMode.Create); //2 ghi byte file oFile.WriteByte(1byte); //3 ₫óng file lại ₫ể phịng ngừa việc ghi bất hợp pháp lên file oFile.Close(); Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.3 Ghi/₫ọc chuỗi byte thơ ra/từ file  Code thí dụ việc ghi chuỗi byte : Bitmap bmScreen; //₫ịnh nghĩa biến chứa ảnh bitmap Graphics gpScreen; //₫ịnh nghĩa biến chứa tác vụ xử lý nội dung ₫ối tượng giao diện this.Hide(); //nếu cần, ẩn Form hành ₫ể không xuất bitmap chụp //tạo ₫ối tượng bitmap kích thước hình bmScreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); //tạo ₫ối tượng Graphics kết hợp với bmScreen gpScreen = Graphics.FromImage(bmScreen); //chụp tồn hình lưu vào bmScreen gpScreen.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.3 Ghi/₫ọc chuỗi byte thô ra/từ file  Code thí dụ việc ghi chuỗi byte : //hiển thị lại Form hành cần this.Show(); //chuyển bitmap thành dãy byte liên tục ImageConverter imgConverter = new ImageConverter(); byte[] xByte = (byte[])imgConverter.ConvertTo(bmScreen, typeof(byte[])); //1 tạo file ₫ể lưu trữ dãy byte nội dung bitmap FileStream oFile = new FileStream("d:\\screen.bin", FileMode.Create); //2 lặp ghi byte dãy xByte file for (int i = 0; i < xByte.Length; i++) oFile.WriteByte(xByte[i]); //3 ₫óng file lại oFile.Close(); Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.3 Ghi/₫ọc chuỗi byte thô ra/từ file  Qui trình ₫ọc chuỗi byte ₫iển sau : //1 tạo ₫ối tượng quản lý file ₫ể ₫ọc liệu FileStream inFile = new FileStream("C:\\data.bin", FileMode.Open); //2 ₫ọc byte từ file inFile.ReadByte(1byte); //3 ₫óng file lại ₫ể phịng ngừa việc ₫ọc bất hợp pháp lên file inFile.Close(); Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.3 Ghi/₫ọc chuỗi byte thơ ra/từ file Code thí dụ việc ₫ọc chuỗi byte : //1 mở file chứa liệu cần ₫ọc FileStream inFile = new FileStream("d:\\screen.bin", FileMode.Open); //tạo biến dãy byte với ₫ộ lớn ₫ộ lớn file byte[] xData = new byte[inFile.Length]; //2 lặp ₫ọc byte từ file vào dãy xData for (int i = 0; i < inFile.Length; i++) xData[i] = (byte)inFile.ReadByte(); //3 ₫óng file lại inFile.Close(); //tạo ₫ối tượng Stream MemoryStream ms = new MemoryStream(xByte, 0, xByte.Length); ms.Position = 0; Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 8.3 Ghi/₫ọc chuỗi byte thô ra/từ file  Code thí dụ việc ₫ọc chuỗi byte : //copy dãy byte vào ₫ối tượng Stream ms.Write(xData, 0, xData.Length); //biến ₫ổi ₫ối tượng Stream thành ₫ối tượng Image System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); //hiển thị bitmap lên ₫ối tượng PictureBox Form ứng dụng picImage.SizeMode = PictureBoxSizeMode.StretchImage; picImage.Image = image; Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 10 8.7 Ghi/Đọc hệ thống ₫ối tượng ra/vào file   Đọc/ghi liệu biến thuộc kiểu giá trị (int, double, char[], ) rấr dễ nội dung biến không chứa tham khảo ₫ến thành phần khác Ngược lại, việc ₫ọc/ghi nội dung ₫ối tượng thường khó khăn ₫ối tượng chứa nhiều tham khảo ₫ến ₫ối tượng khác ₫ối tượng tham khảo vịng lẫn Để hỗ trợ việc ₫ọc/ghi nội dung ₫ối tượng, VC# ₫ề nghị kỹ thuật "Serialization" Một ₫ối tượng ₫ược "serialize/deserialize" (ghi/₫ọc dùng kỹ thuật Serialization) thuộc class "serializable" Để ₫ịnh nghĩa class "serializable" dễ dàng ₫ơn giản nhất, ta cần thêm mệnh ₫ề [Serializable] trước phát biểu ₫ịnh nghĩa class ₫ó : [Serializable] public class A { } Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 39 8.7 Ghi/Đọc hệ thống ₫ối tượng ra/vào file  Để ghi ₫ối tượng (và toàn ₫ối tượng mà phụ thuộc) dạng nhị phân, ta viết template sau : //1 xử lý xây dựng ₫ối tượng B b; //2 ₫ịnh nghĩa ₫ối tượng FileStream miêu tả file chứa kết FileStream fs = new FileStream("c:\\data.obj", FileMode.Create); //3 tạo ₫ối tượng BinaryFormatter phục vụ ghi ₫ối tượng BinaryFormatter formatter = new BinaryFormatter(); //4 gọi tác vụ Serialize formatter ₫ể ghi ₫ối tượng formatter.Serialize(fs, b); //₫óng file lại fs.Flush(); fs.Close(); Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 40 8.7 Ghi/Đọc hệ thống ₫ối tượng ra/vào file  Để ₫ọc lại ₫ối tượng (và toàn ₫ối tượng mà phụ thuộc) dạng nhị phân ta, viết template sau : //1 ₫ịnh nghĩa biến ₫ối tượng ₫ể chứa nội dung từ file B b; //2 ₫ịnh nghĩa ₫ối tượng FileStream miêu tả file chứa liệu ₫ã có FileStream fs = new FileStream("c:\\data.obj", FileMode.Open); //3 tạo ₫ối tượng BinaryFormatter phục vụ ₫ọc ₫ối tượng BinaryFormatter formatter = new BinaryFormatter(); //4 gọi tác vụ Deserialize ₫ể ₫ọc ₫ối tượng từ file vào b = (B) formatter.Deserialize(fs); //₫óng file lại fs.Close(); Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 41 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng  Giả sử ta có hệ thống ₫ối tượng với trạng thái mối quan hệ chúng cụ thể sau Lưu ý chúng có mối quan hệ bao gộp dạng vòng : intB1 = dblB2 = 2.345 ba pba pba1 intA1 = dblA2 = 1.234 pab intA1 = dblA2 = 3.456 pab ₫ối tượng class B ₫ối tượng class A Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 intA1 = dblA2 = 4.567 pab Môn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 42 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng Giả sử biến b ₫ang tham khảo tới ₫ối tượng class B Hãy viết chương trình ghi hệ thống ₫ối tượng lên file ₫ể cần, ₫ọc lại vào nhớ hầu xử lý tiếp  Qui trình xây dựng ứng dụng giải yêu cầu sau : Chạy VS Net, chọn menu File.New.Project ₫ể hiển thị cửa sổ New Project Mở rộng mục Visual C# TreeView "Project Types", chọn mục Windows, chọn icon "Console Application" listbox "Templates" bên phải, thiết lập thư mục chứa Project listbox "Location", nhập tên Project vào textbox "Name:" (td WRObject), click button OK ₫ể tạo Project theo thông số ₫ã khai báo  Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 43 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng Ngay sau Project vừa ₫ược tạo ra, cửa sổ soạn code cho chương trình ₫ược hiển thị Thêm lệnh using sau ₫ây vào ₫ầu file : using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; Viết code cho hàm Main hàm dịch vụ khác sau : class Program { static String fbuf; static void Main(string[] args) { //₫iểm nhập chương trình //xây dựng hệ thống ₫ối tượng ghi lên file Create_SaveObject(); //₫ọc lại hệ thống ₫ối tượng //ReadObject(); } Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 44 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng //hàm xây dựng hệ thống ₫ối tượng ghi lên file public static void Create_SaveObject() { //khở tạo ₫ối tượng b theo hình silde 24 B b = new B(); b.init(2,2.345); b.Setba(1,1.234,b); b.Setpba(3,3.1416,b); b.Setpba1(4,4.567,b); Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 45 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng //ghi ₫ối tượng b dùng kỹ thuật Serialization try { //1 ₫ịnh nghĩa ₫ối tượng FileStream miêu tả file chứa kết FileStream fs = new FileStream("c:\\data.obj", FileMode.Create); //2 tạo ₫ối tượng BinaryFormatter phục vụ ghi ₫ối tượng BinaryFormatter formatter = new BinaryFormatter(); //3 gọi tác vụ Serialize formatter ₫ể ghi ₫ối tượng formatter.Serialize(fs,b); //4 ₫óng file lại fs.Flush(); fs.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 46 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng //hàm ₫ọc ₫ối tượng b dùng kỹ thuật Serialization public static void ReadObject() { try { //1 ₫ịnh nghĩa ₫ối tượng FileStream miêu tả file chứa liệu ₫ã có FileStream fs = new FileStream("c:\\data.obj", FileMode.Open); //2 tạo ₫ối tượng BinaryFormatter phục vụ ₫ọc ₫ối tượng BinaryFormatter formatter = new BinaryFormatter(); //3 gọi tác vụ Deserialize ₫ể ₫ọc ₫ối tượng từ file vào B b = (B) formatter.Deserialize(fs); //4 ₫óng file lại fs.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } //hết hàm Main } //hết class program Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 47 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng Ấn phải chuột vào phần tử gốc Project cửa sổ Solution Explorer, chọn option Add.Class, ₫ặt tên A.cs ₫ể tạo file ₫ặc tả class A Khi cửa sổ hiển thị mã nguồn class A hiển thị, ₫ặc tả class A ₫oạn code ₫ây : //thêm lệnh using sau ₫ầu file using System.Runtime.Serialization; namespace WRObject { [Serializable] public class A { //₫ịnh nghĩa thuộc tính liệu private int intA1; private double dblA2; private B pab; Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 48 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng //₫ịnh nghĩa tác vụ public A() {} public void init(int a1, double a2, B p) { this.intA1 = a1; this.dblA2 = a2; this.pab = p; } } } Ấn phải chuột vào phần tử gốc Project cửa sổ Solution Explorer, chọn option Add.Class, ₫ặt tên B.cs ₫ể tạo file ₫ặc tả class B Khi cửa sổ hiển thị mã nguồn class B hiển thị, ₫ặc tả class B ₫oạn code ₫ây : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 49 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng //thêm lệnh using sau ₫ầu file using System.Runtime.Serialization; namespace WRObject { [Serializable] public class B { //₫ịnh nghĩa thuộc tính liệu private int intB1; private double dblB2; private A ba; private A pba; private A pba1; //₫ịnh nghĩa tác vụ public B() { } Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 50 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng public void init(int b1, double b2) { this.intB1 = b1; this.dblB2 = b2; ba = new A(); pba = new A(); pba1 = new A(); } public void Setba (int a1, double a2, B b) { this.ba.init (a1,a2,b); } public void Setpba (int a1, double a2, B b) { this.pba.init (a1,a2,b); } public void Setpba1 (int a1, double a2, B b) { this.pba1.init (a1,a2,b); } } //hết class B } //hết namespace WRObject Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 51 8.8 Thí dụ ₫ọc/ghi hệ thống ₫ối tượng Chọn menu Debug.Start Debugging ₫ể dịch chạy ứng dụng Hệ thống ₫ối tượng ₫ược tạo lưu lên file c:\data.obj Hiển thị cửa sổ soạn mã nguồn file Program.cs, thích lệnh gọi Create_SaveObject(); bỏ thích lệnh gọi ReadObject(); Dời chuột lệnh "B b = (B) formatter.Deserialize(fs);" hàm ReadObject(), click chuột vào lệnh trái lệnh ₫ể thiết lập ₫iểm dừng Chọn menu Debug.Start Debugging ₫ể dịch chạy ứng dụng Ứng dụng dừng lệnh dừng Dời chuột biến b, ta thấy cửa sổ hiển thị giá trị biến lúc null Ấn F10 ₫ể thực ₫úng lệnh dừng lại, dời chuột biến b, mở rộng phân cấp miêu tả nội dung biến b thấy chứa ₫úng thơng tin slide 14, nghĩa chương trình ₫ã ₫ọc ₫ược toàn hệ thống ₫ối tượng ₫ã lưu giữ trước ₫ây Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 52 8.9 Kết chương   Chương ₫ã giới thiệu ₫ối tượng phục vụ ghi/₫ọc liệu ra/vào file tác vụ ghi/₫ọc liệu cổ ₫iển ra/vào file Chương ₫ã giới thiệu ₫ối tượng phục vụ ghi/₫ọc hệ thống ₫ối tượng ra/vào file tác vụ ghi/₫ọc hệ thống ₫ối tượng có mối quan hệ tham khảo phức tạp ra/vào file Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Lập trình hướng ₫ối tượng Chương : Ghi/₫ọc liệu ứng dụng C# file Slide 53

Ngày đăng: 29/12/2022, 11:48

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w