Bài giảng Lập trình hướng đối tượng - Chương 8: Ghi/đọc dữ liệu của ứng dụng C# ra file

Chương 8  
Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
8.0 Dẫn nhập  
8.1 Tổng quát về ₫ời sống của dữ liệu của ứng dụng VC#  
8.2 Các cấp ₫ộ ghi/₫ọc dữ 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 dữ liệu có kiểu ₫ịnh sẵn ra/từ file nhị phân  
8.6 Ghi/₫ọc dữ liệu có kiểu ₫ịnh sẵn ra/từ file văn bản  
8.7 Ghi/Đọc hệ thống ₫ối tượng ra/vào file  
8.8 Thí dụ về ₫ọc/ghi hệ thống ₫ối tượng  
8.9 Kết chương  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 1  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.0 Dẫn nhập  
Chương này giới thiệu các ₫ối tượng phục vụ ghi/₫ọc dữ liệu  
ra/vào file cùng các tác vụ ghi/₫ọc dữ liệu cổ ₫iển ra/vào file.  
Chương này cũng giới thiệu các ₫ối tượng phục vụ ghi/₫ọc hệ  
thống ₫ối tượng ra/vào file cùng các 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.  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 2  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.1 Tổng quát về ₫ời sống của dữ liệu ứng dụng VC#  
Nhu cầu ghi/₫ọc nội dung của các biến dữ liệu thường rơi vào 3  
tình huống chính yếu sau ₫ây :  
1. Lưu kết quả của phiên làm việc hiện hành ₫ể dùng lại cho phiên  
làm việc kế tiếp.  
2. Nhập rất nhiều dữ liệu cho phần mềm.  
3. Xuất rất nhiều dữ liệu cho người dùng.  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 3  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Các cấp ₫ộ ghi/₫ọc dữ liệu phổ biến  
1. ghi/₫ọc chuỗi byte thô ra/từ file, ngữ nghĩa của các byte do chương  
trình tự qui ₫ịnh.  
2. ghi/₫ọc chuỗi ký tự theo cách mã hóa xác ₫ịnh (ASCII, UTF8, UCS-  
2,...) ra/từ file.  
3. ghi/₫ọc các dữ liệu thuộc các kiểu cơ bản ₫ịnh sẵn như bool, byte,  
int, double, String,... ra/từ file theo dạng nhị phân, là dạng mã hóa  
gốc bên trong chương trình.  
4. giải mã các dữ liệu thuộc các kiểu cơ bản ₫ịnh sẵn như bool, byte,  
int, double, String,... thành chuỗi văn bản, ghi chuỗi ra file văn bản  
₫ể khi cần ₫ọc các chuỗi văn bản từ file vào chương trình, mã hóa  
từng chuỗi trên file thành dữ liệu nhị phân bên trong chương trình  
trước khi xử lý tiếp.  
5.ghi/₫ọc ₫ối tượng và các ₫ối tượng ₫ược tham khảo trực tiếp hay  
gián tiếp bởi ₫ối tượng gốc ra/từ file nhị phân hay file XML.  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 4  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Ghi/₫ọc chuỗi byte thô ra/từ file  
class sử dụng : FileStream  
các tác vụ : WriteByte(), ReadByte()  
Qui trình ghi ₫iển hình như sau :  
//1. tạo ₫ối tượng quản lý file ₫ể ghi dữ liệu  
FileStream oFile = new FileStream("C:\\data.bin",  
FileMode.Create);  
//2. ghi tuần tự từng byte ra 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();  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 5  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
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 các tác vụ xử lý nội dung ₫ối tượng giao diện  
this.Hide(); //nếu cần, ẩn Form hiện hành ₫ể không xuất hiện trong bitmap chụp  
//tạo ₫ối tượng bitmap cùng kích thước màn 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 toàn màn hình và lưu vào bmScreen  
gpScreen.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,  
Screen.PrimaryScreen.Bounds.Y, 0, 0,  
Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 6  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
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 hiện hành nếu cần  
this.Show();  
//chuyển bitmap thành dãy các 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 các byte nội dung của bitmap  
FileStream oFile = new FileStream("d:\\screen.bin", FileMode.Create);  
//2. lặp ghi từng byte của dãy xByte ra file  
for (int i = 0; i < xByte.Length; i++) oFile.WriteByte(xByte[i]);  
//3. ₫óng file lại  
oFile.Close();  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 7  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Ghi/₫ọc chuỗi byte thô ra/từ file  
Qui trình ₫ọc chuỗi byte ₫iển hình như sau :  
//1. tạo ₫ối tượng quản lý file ₫ể ₫ọc dữ liệu  
FileStream inFile = new FileStream("C:\\data.bin",  
FileMode.Open);  
//2. ₫ọc tuần tự từng 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();  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 8  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
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 dữ liệu cần ₫ọc  
FileStream inFile = new FileStream("d:\\screen.bin", FileMode.Open);  
//tạo biến dãy các byte với ₫ộ lớn bằng ₫ộ lớn của file  
byte[] xData = new byte[inFile.Length];  
//2. lặp ₫ọc từng 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;  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 9  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
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 của Form ứng dụng  
picImage.SizeMode = PictureBoxSizeMode.StretchImage;  
picImage.Image = image;  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 10  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.4 Ghi/₫ọc chuỗi ký tự ra/từ file  
class sử dụng : StreamWriter, StreamReader  
các tác vụ : Write (), Read ()  
Qui trình ghi ₫iển hình như sau :  
//1. tạo ₫ối tượng quản lý file ₫ể ghi dữ liệu  
StreamWriter oFile = new StreamWriter("d:\\data.txt", false,  
Encoding.Unicode);  
//2. ghi tuần tự từng ký tự ra file  
oFile.Write(buf[i]);  
...  
//3. ₫óng file lại ₫ể phòng ngừa việc ghi bất hợp pháp lên file  
oFile.Close();  
Lưu ý ký tự ₫ược ₫ổi từ mã Unicode 2 byte bên trong chương trình  
ra mã ký tự do file qui ₫ịnh.  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 11  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.4 Ghi/₫ọc chuỗi ký tự ra/từ file  
Code thí dụ việc ghi chuỗi ký tự :  
//xử lý và tạo chuỗi văn bản kết quả rồi chứa vào biến ₫ể lưu giữ  
String buf = "Thí dụ ₫ể xuất ma trận ra file văn bản, ta có thể qui ước các dữ liệu sẽ xuất nhập  
tuần tự : số hàng, số cột, giá trị các phần tử hàng 1 từ trái sang phải, giá trị các phần tử hàng 2  
từ trái sang phải,... cuối cùng là giá trị các phần tử hàng cuối của ma trận. Giữa 2 phần tử kề  
nhau ta xuất thêm 1 hay nhiều dấu ngăn phù hợp như khoảng trắng, dấu phẩy, dấu ₫óng cột,  
dấu xuống hàng... Sau ₫ây là nội dung file văn bản miêu tả ma trận có 5 hàng, 7 cột";  
//1. tạo file ₫ể lưu trữ chuỗi ký tự theo cách mã hóa UCS-2  
StreamWriter oFile = new StreamWriter("d:\\data.txt", false,  
Encoding.Unicode);  
//2. lặp ghi từng ký tự của chuỗi văn bản ra file  
for (int i = 0; i < buf.Length; i++) oFile.Write(buf[i]);  
//3. ₫óng file lại  
oFile.Close();  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 12  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.4 Ghi/₫ọc chuỗi ký tự ra/từ file  
Qui trình ₫ọc chuỗi ký tự ₫iển hình như sau :  
//1. tạo ₫ối tượng quản lý file ₫ể ₫ọc dữ liệu  
StreamReader inFile = new StreamReader(fileName,  
Encoding.Unicode);  
//2. ₫ọc tuần tự từng ký tự từ file  
ch = (char)inFile.Read();  
...  
//3. ₫óng file lại ₫ể phòng ngừa việc ₫ọc bất hợp pháp lên file  
inFile.Close();  
Lưu ý sau khi ₫ọc ₫ược ký tự từ file, hàm Read sẽ ₫ổi từ mã gốc  
trên file sang mã Unicode 2 byte bên trong chương trình.  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 13  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.4 Ghi/₫ọc chuỗi ký tự ra/từ file  
Code thí dụ việc ₫ọc chuỗi ký tự :  
//₫ịnh nghĩa biến chứa dãy ký tự ₫ọc từ file vào  
char[] xchar;  
//₫ịnh nghĩa biến chứa ₫ường dẫn của file van bản cần ₫ọc  
String fileName = "d:\\data.txt";  
//tạo ₫ối tượng FileInfo kết hợp với file ₫ể lấy các thông tin về file  
FileInfo fi = new FileInfo(fileName);  
//1. tạo ₫ối tượng file chứa chuỗi ký tự theo cách mã hóa UCS-2 cần ₫ọc  
StreamReader inFile = new StreamReader(fileName, Encoding.Unicode);  
//phân phối vùng nhớ cần thiết cho biến array các ký tự  
xchar = new char[fi.Length];  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 14  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.4 Ghi/₫ọc chuỗi ký tự ra/từ file  
Code thí dụ việc ₫ọc chuỗi ký tự :  
//2. lặp ₫ọc từng ký tự từ file vào biến array các ký tự  
int i = 0;  
while (!inFile.EndOfStream)  
xchar[i++] = (char)inFile.Read();  
//3. ₫óng file lại  
inFile.Close();  
//₫ổi array ký tự thành dạng chuổi ký tự  
String buf = new String(xchar);  
//hiển thị chuỗi kết quả lên TextBox  
txtOutput.Text = buf;  
Môn : Lập trình hướng ₫ối tượng  
Khoa Khoa học & Kỹ thuật Máy tính  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 15  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.5 Ghi/₫ọc dữ liệu có kiểu ₫ịnh sẵn ra/từ file nhị phân  
class sử dụng : FileStream, BinaryWriter, BinaryReader  
các tác vụ : Write (), ReadBoolean(), ..., ReadSTring()  
Lưu ý :  
. khi ghi 1 dữ liệu ra file nhị phân, máy sẽ ₫ể nguyên ₫ịnh dạng  
gốc bên trong rồi ghi ra file (td. giá trị double chiếm 8 byte sẽ  
₫ược ghi ra file thành 8 byte) trừ trường hợp dữ liệu chuỗi.  
Trong trường hợp này máy sẽ giải mã chuỗi từ mã Unicode 2  
byte thành mã UTF-8 rồi ghi ra file (có ghi thêm ₫ộ dài chuỗi ₫ể  
khi ₫ọc lại máy biết chính xác).  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 16  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.5 Ghi/₫ọc dữ liệu có kiểu ₫ịnh sẵn ra/từ file nhị phân  
Lưu ý :  
. khi ₫ọc 1 dữ liệu từ file nhị phân vào, máy sẽ ₫ể nguyên ₫ịnh  
dạng gốc trên file và copy vào bộ nhớ chương trình (td. giá trị  
double chiếm 8 byte trên file sẽ ₫ược ₫ọc vào thành 8 byte  
trong biến double) trừ trường hợp dữ liệu chuỗi. Trong trường  
hợp này máy sẽ mã hóa chuỗi từ mã UTF-8 trên file thành mã  
Unicode 2 byte của kiểu String trong chương trình.  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 17  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.5 Ghi/₫ọc dữ liệu có kiểu ₫ịnh sẵn ra/từ file nhị phân  
Qui trình ghi ₫iển hình như sau :  
//1. tạo ₫ối tượng quản lý file  
FileStream stream = new FileStream("C:\\data.bin", FileMode.Create);  
//2. tạo ₫ối tượng phục vụ ghi file  
BinaryWriter writer = new BinaryWriter(stream);  
//3. xử lý dữ liệu theo yêu cầu chương trình  
int i = -15;  
double d = -1.5;  
String s = "Nguyễn Văn Hiệp";  
bool b = true;  
//4. ghi dữ liệu ra file  
writer.Write(b); writer.Write(i); writer.Write(d); writer.Write(s);  
//5. ₫óng các ₫ối tượng ₫ược dùng lại  
writer.Close(); stream.Close();  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 18  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.5 Ghi/₫ọc dữ liệu có kiểu ₫ịnh sẵn ra/từ file nhị phân  
Tác vụ Write của class BinaryWriter có 14 biến thể 1 tham số ₫ể ghi  
₫ược 14 kiểu dữ liệu ₫ịnh sẵn phổ biến sau ₫ây :  
. Boolean  
. Byte, SByte  
. Int16, Int32, Int64  
. UInt16, UInt32, UInt64  
. Single, Double, Decimal  
. Byte[] , Char[]  
. Char, String  
Muốn ghi nội dung của biến thuộc 1 trong 14 kiểu dữ liệu ₫ịnh sẵn  
trên, ta gọi tác vụ write theo dạng sau :  
writer.Write(varname); //writer là biến ₫ối tượng BinaryWriter  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 19  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.5 Ghi/₫ọc dữ liệu có kiểu ₫ịnh sẵn ra/từ file nhị phân  
Tác vụ Write của class BinaryWriter còn có 2 biến thể 3 tham số ₫ể  
ghi ₫ược các phần tử chọn lọn trong danh sách :  
//ghi count byte từ vị trí index trong danh sách buffer  
BinaryWriter.Write(Byte[] buffer, int index, int count);  
//ghi count ký tự từ vị trí index trong danh sách buffer  
BinaryWriter.Write(Char[] buffer, int index, int count);  
Môn : Lập trình hướng ₫ối tượng  
Chương 8 : Ghi/₫ọc dữ liệu của ứng dụng C# ra file  
Slide 20  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Tải về để xem bản đầy đủ
pdf 53 trang myanh 26080 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 8: Ghi/đọc dữ liệu của ứng dụng C# ra file", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_8_ghidoc_du_lieu.pdf