
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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 1
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
Chương 8
Ghi/₫ọc dữliệu của ứng dụng C# ra 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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 2
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.

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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 3
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.
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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 4
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.

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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 5
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();
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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 6
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);

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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 7
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();
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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 8
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();

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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 9
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;
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 8 : Ghi/₫ọc dữliệu của ứng dụng C# ra file
Slide 10
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;

