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 đủ
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:
bai_giang_lap_trinh_huong_doi_tuong_chuong_8_ghidoc_du_lieu.pdf

