Bài tập lớn Môn Lập trình NHT 1 + BTL 3.1 Liệt kê các File có kiểu DirectoryInfo Ngoài việc lấy chỉ tiết cơ bản của một thư mục đã có, bạn có thể mở rộng ví dụ hiện tại để sử dụng một số
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRUONG DAI HOC MO - DIA CHAT
BAI TAP LON
MON LAP TRINH NET 1 + BTL
DE TAI:
FILE I/O AND OBJECT SERIALIZATION
SINH VIÊN THỰC HIỆN CÁN BỌ GIẢNG DẠY
Lớp Công nghệ Phần mềm Kóó A Môn Lập trình Net 1 + BTL Nguyễn Quang Hải - 2121050617
Lớp Công nghệ Phần mềm Káóó C Ngô Nam Hải - 2121051091 Lớp Mang may tinh K66 A Nguyễn Thụ Hoàng Vũ -2021050737 Lớp Công nghệ Phần mềm Káó5 B
HA NOI, 12/2023
Trang 2CHƯƠNG 19: Tuần tự hóa Tệp I/O và Đối tượng 2+2 sen srererrrrrrrrrrrree
1 A4 oi th 0
2 Các loại Direcfory(Info) và FIle(ÏnÍO) - - nghe rệp
2.1 Lớp cơ sở FileSystemlnfo trữu tưỢng - cty 8 3 Làm việc với kiểu DirectOryÏnỂO - + xxx ggrưàt 3.1 Liệt kê các File có kiểu DirectoryÏnfO s2 sn nành rrrrre 11
3.2 Tạo Thư mục Con với kiểu DirectoryÏnfFO - -ccscc sex site rrrrrrrrree 11
4 Làm việc với kiểu Dir€CfOTV nành HH HH Hit
5 Làm việc với kiểu DrivelnfO - + tt St 2v 22x 225tr 1 HH re
6 _ Làm việc với lớp Eil€ÏnfO - + tt HH rư grưret 6.1 Phương thức Filelnfo.CTeaf€() . ác nh HH HH rệt 15 6.2 Phương thức FileInfo.Open() sành HH ưt 16 6.3 Các phương thức Filelnfo.OpenReadQ) và Filelnfo.OpenWriteQ 18 6.4 Phương thức FileInfo.OpenTexf() - nhe ướt 18 6.5 Các phương thức Filelnfo.CreateTextQ và Filelnfo.AppendTextQ 19 7 Lâm việc cùng các Tập tỉn - ch TH HH go tr
8 Lớp Stream Trừu tƯỢng nh HH HH HH gi 8.1 Làm việc cùng với FileStr€aIms nhàn HH tre 22
9 Lầm việc cùng StreamWriters and StreamReadkr . - 5c s+c se
9.2 Đọc từ một tệp tin văn bản nh re 25
9.3 Tạo trực tiếp các loại StreamWriter / StreamiReader -ccc cà 26
Nguyễn Quang Hải (2121050617) Nhóm 12 Bùi Thị Phượng (2121051001)
Ngô Nam Hải (2121051091)
Nguyễn Thụ Hoàng Vũ (2021050737)
Trang 3Bài tập lớn Môn Lập trình NHT 1 + BTL
10 Làm Việc với StringWriters và String Read€rs chen re
11 Làm việc với BinaryWriters và BinaryR€ad€rs cà ennrrrere
12 Xem tập tin theo chương trình 2n HH HH HH nh He
13.1 Vai trd ctta dO thi d6i tng ccc cece cece ecessessseestessestecsestecseessenees 33 13.2 Tạo các loại mẫu và báo cáo cấp cao nhất -22 225cc 34 13.3 Ngôn ngữ đánh dấu mở rộng (XML) cành 37 13.4 Tuần tự hóa và giải tuần tự hóa bằng XmlSerializer 38
13.5 Kiểm soát dữ liệu XML, được tạO QQn n2 HH reo 38
13.6 Kiểm soát dữ liệu JSON được tạo - 25 2225 crcrrerrrerrrrrrerree 44 13.7 Tuần tự hóa các đối tượng bằng cách sử dụng JsonSerializer 44
Trang 4Bài tập lớn Môn Lập trình NHT 1 + BTL
DANH MỤC CÁC HINH VE
Hình 19 1 Biểu đ ôđối tượng đơn giản nh HH ng rệt 34
DANH MUC CAC BANG BIEU
Bang 19 1 Các thành viên chính của Namespace System.ÏO sec 7
Bảng 19 2 Liệt kê một số thuộc tính cốt lõi được quan tâm s22 8
Bang 19 3 Các bộ phận mã khóa chỉ tIẾT - 1S nh nnnnH nh HH HH rưệt 9 Bang 19 4 Một số điểm đặc biệt trong lớp EilelnfO cà csccscsersrrrrsrrreree 15 Bảng 19 5 Các thành viên của FleMode Enumeration - cài 17 Bang 19 6 Phương pháp của loại (Ệ - nành HH HH HH it 20 Bang 19 7 Abstract Stream Memb€rs si ngờ 22 Bảng 19 8 Các thành viên cốt lõi của 'TexfWWTiI€T sư 24 Bang 19 9 Thành viên cốt lõi của 'TextReader ch rrrrrrrrrrrrrree 26 Bang 19 10 Thành viên cốt lối của BinaryWWTi€T chen ghe 29 Bang 19 11 Thành viên cốt lõi của BinaryReader cà cành này 29 Bang 19 12 Chọn thuộc tính của namespace System.XmI.Serialization 39 Bảng 19 13 Chọn thuộc tính của namespace System.Text.Json.Serialization 44 Bang 19 14 Các giá trị Enum của ReferenceHandler - s5 s sec set re 49 Bảng 19 15 JsonNumber Xử lý các giá trị Enum - 5s sesrrerrrrrree 50 Bang 19 16 Bảng phân công nhiệm vụ s2 s2 như 57
Nguyễn Quang Hải (2121050617) Nhóm 12 Bùi Thị Phượng (2121051001)
Ngô Nam Hải (2121051091)
Nguyễn Thụ Hoàng Vũ (2021050737)
Trang 5Bài tập lớn Môn Lập trình NHT 1 + BTL
LOI CAM ON
Trên thực tế không có sự thành công nào mà không gắn li với những sự hỗ trợ, giúp
đỡ dù ít hay nhỉ ân, dù trực tiếp hay gián tiếp của người khác Trong suốt thởi gian từ khi bat
đầi học, học phần “Lập trình Net 1”, nhóm chúng em đã nhận được rất nhi âi sự quan tâm,
giúp đỡ của quý th cô gia đình và bạn bè
Với lòng biết ơn sâu sắc nhất, nhóm chúng em xin gửi đến quý th% Phạm Văn Ð'âng - khoa Công nghệ thông tin của trưởng Đại Học Mỏ - Địa chất, mặc dù th chỉ dạy chúng em trong thởi gian ngắn nhưng cùng với tri thức và tâm huyết của mình, th%y đã truyền đạt vốn kiến thức quý báu cho chúng em từ lúc bất đi cho tới khi kết thúc học pha
Vì vậy chúng em đã rất nỗ lực để hoàn thành báo cáo này, song thởi gian có hạn, kiến thức bản thân chúng em còn hạn chế, chưa tiếp xúc trong thực tế nhi `âi nên khó tránh khỏi những thiếu sót trong bài làm Chúng em kính mong nhận được sự đóng góp ý kiến của th
để bài báo cáo của chúng em ngày càng hoàn thiện hơn
Chúng em xin chân thành cảm ơn!
Trang 6Bài tập lớn Môn Lập trình NHT 1 + BTL
Khi bạn tạo các ứng dụng màn hình, khả năng lưu thông tin vào các phiên chạy người
dùng là phổ biến Chương này kiểm tra vài phần trong số I/O-related như nhìn thấy qua con mất của các hoạt động Thứ tự công việc đầi tiên là khám phá các kiểu chính xác trong danh
sách System.IO và học cách sửa đổi thư mục và cấu trúc tập tin của máy Nhiệm vụ tiếp theo
là khám phá nhi`âi cách khác nhau để đọc và ghi vào dựa trên ký tự, dựa trên nhị phân, dựa trên chuỗi và dựa trên bộ nhớ kho dữ liệu Sau khi bạn học cách thao tác tập tin và thư mục
bằng cách sử dụng các kiểu I/O cét Idi, bạn sẽ kiểm tra đối tượng liên quan đến tuần tự hóa
đối tượng Bạn có thể sử dụng tu3n tự hóa đối tượng để duy trì và truy xuất một trạng thái của
một object tử bất kỳ loại có ngu ồn gốc từ ŠSystem.IO.Stream
Ghi chú: Để đảm bảo rằng bạn có thể chạy mỗi ví dụ trong chương trình này, hãy khởi động Visual Studio voi quy tổ hợp (chỉ c3n nhấp chuột phải vào biểu tượng Visual Studio
và chọn chạy với tư cách Quản trị viên) Còn nếu bạn không làm như vậy, bạn có thể chạy
lệnh bảo mật khi truy vấn khi truy cập tập tỉn máy tính
1 Khám phá System.IO Namespace Trong khuôn khổ Net Core, SyStem.IO là vùng chứa các thư viện lớp cơ bản dành
cho đầi ra và đầu vào (IL/O) dựa trên tệp (và dựa vào bộ nhớ) Giống như bất kỳ Namespace
nao, System.IO định nghĩa một tập hợp các lớp, giao diện, bảng liệt kê và phần lớn trong số
đó bạn có thể tìm thấy trong mscorlib.dll Ngoài các kiểu có trong mscorlib.dll, tập hợp System.dll con định nghĩa các kiểu bổ sung thành viên của System.IO Namespace Nhi 'âi loại trong System.IO Namespace tap trung vao thao tác lập trình của các thư mục và tập tin vật lý
Tuy nhiên, các loại bổ sung cung cấp hỗ trợ để đọc dữ liệu và ghi dữ liệu vào bộ đệm chuỗi
cũng như các vị trí bộ nhớ thô Bảng 19-1 phác thảo các lớp cốt lõi (không trừu tượng), cung cấp bản đ`ôđường đi của chức nang trong System.IO
Nonabstract /O Meaning in life
Class Type BinaryReader Các lớp này cho phép bạn lưu trữ và truy xuất các kiểu dữ liệu BinaryWriter nguyên thủy (integers, Booleans, strings, va whatnot) nhu mét gid
trị nhị phân
BuferedStream Lớp này cung cấp lưu trữ tạm thời cho một lu ông byte mà bạn có
thể cam kết lưu trữ sau này
Directory Bạn sử dụng các lớp này để thao tác cấu trúc thư mục của máy
DirectoryInf Loại thư mục hiển thị chức năng sử dụng static members (cdc
thành viên tĩnh) trong khi loại Directorylnfo hiển thị chức năng
Nguyễn Quang Hải (2121050617) Nhóm 12 Bùi Thị Phượng (2121051001)
Ngô Nam Hải (2121051091)
Nguyễn Thụ Hoàng Vũ (2021050737)
Trang 7Bài tập lớn Môn Lập trình NHT 1 + BTL
Drivelnfo Lớp này cung cấp thông tin chỉ tiết v`&các ổ đĩa mà một máy nhất
định sử dụng
File Bạn sử dụng các lớp này để thao tác với bộ tệp của máy Loại tệp
FileInfo hiển thị chức năng sử dụng static members (cdc thanh viên tĩnh),
trong khi loại Eilelnfo hiển thị chức năng tương tự từ oÖ/ecf
reƒerence (tham chiếu đối tượng) hợp lệ
FileStream Lớp này cung cấp cho bạn quy n truy cập tệp ngẫu nhiên (ví dụ:
khả năng m kiếm) với dữ liệu được biểu diễn dưới dạng một
lu ông byte
FileSystemWatcher Lớp này cho phép bạn theo dõi việc sửa đổi các tệp bên ngoài
trong một thư mục được chỉ định
MemoryStream Lớp này cung cấp quy Ân truy cập ngẫu nhiên vào dữ liệu được lưu
trữ trong bộ nhớ thay vì trong tệp vật lý
Path Lớp này thực hiện các thao tác trên các loại System.String có chứa
tệp hoặc thông tin đường dẫn thư mục theo cách trung lập với n`n tảng
StreamWriter Bạn sử dụng các lớp này để lưu trữ (và truy xuất) thông tin văn
StreamReader bản đến (hoặc từ) một tệp Các loại này không hỗ trợ truy cập tệp
Bảng 19 1 Các thành viên chính cla Namespace System.IO
Ngoài các loại lớp cụ thể này, System.IO định nghĩa một số liệt kê, cũng như một tập
hợp các lớp trừu tượng (ví dụ: Stream, TextReader và TexfWriter), xác định giao diện đa hình
được chia sẻ cho tất cả con cháu Bạn sẽ đọc v`ênhi ân loại này trong chương này
2 Các loại Directory(Info) và File(Info) System.IO cung cấp 4 lớp, cho phép bạn thao tác với các tệp riêng lẻ cũng như tương
tác với một cấu trúc thư mục của máy Hai loại đầi tiên, Directory và Eile hiển thị việc tạo,
xóa, sao chép và các hoạt động di chuyển bằng cách sử dụng các thành viên tĩnh khác nhau FileInfo va Directory có liên quan chặt chẽ các loại thể hiện chức năng tương tự các phương thức cấp phiên bản (do đó, bạn phải phân bổ chúng với từ khóa mới) Các lớp Directory và Nguyễn Quang Hải (2121050617) Nhóm 12 Bùi Thị Phượng (2121051001)
Ngô Nam Hải (2121051091)
Trang 8Bài tập lớn Môn Lập trình NHT 1 + BTL
Hille trực tiếp mở rộng System.Object, trong khi Directorylnfo và FEilelnfo xuất phát từ kiểu FileSystemlnfo trừu tượng
FileInfo va DirectoryInfo thương đóng vai trò là lựa chọn tốt hơn để có được thông tin
chỉ tiết đầ% đủ về Directory hoặc File (VD: thời gian tạo hoặc khả năng đọc/ghi) vì các
member của chúng có khuynh hướng quay lại các đối tượng mạnh Ngược lại, các member của lớp Directory và File có khuynh hướng trả v`êcác giá trị chuỗi đơn giản hơn là thích hợp với các đối tượng Tuy nhiên, đây chỉ là hướng dẫn; trong nhí ân trưởng hợp, bạn có thể hoàn thành công việc tương tự sử dụng File/Filelnfo hoặc Directory/Directorylnfo
2.1 Lớp cơ sở FileSystemlInfo trừu tượng
Các loại DirectoryInfo và FileInfo nhận được nhỉ ân hành vi từ abstract FileSystemlnfo
lớp cơ sở Trong hâi hết các trưởng hợp, bạn sử dụng các member của lớp FileSystemlnfo để khám phá các thông tin chung, các đặc điểm (chẳng hạn như thời gian tạo, các thuộc tính khác
nhau ) v`Šmột File/Directory nhất định Bảng 19-2 liệt kê một số thuộc tính quan trọng
Property Meaning in Life
Attributes Lấy hoặc đặt các thuộc tính được liên kết với tệp hiện tại được
đại diện bởi liệt kê HleAttributes (ví dụ: fñle/directory chỉ đọc, được mã hóa, ẩn, hoặc bị nén?)
CreationTime Lấy hoặc đặt thời gian tạo cho file/directory hiện tại
Exists Xác định xem một file/directory nhất định có t ôn tại hay không Extension Truy xuất phần mở rộng của file
FullName Lấy đường dẫn đầy đủ của file/directory
LastAccessTime Nhận hoặc dat thoi gian file/directory hién tai duoc truy c4p lần
Bảng 19 2 Liệt kê một số thuộc tính cốt lõi được quan tâm
FileSystemlnfo cũng định nghĩa phương thức Delete() Đi`âi này được thực hiện bởi
các loại dẫn xuất để xóa một File hoặc Directory nhất định từ ổ cứng Ngoài ra, bạn có thể gọi RefreshQ trước khi lấy thuộc tính thông tin để đảm bảo rằng số liệu thống kê vềEile hoặc
Directory hiện tại không bị lỗi thời
Trang 9Bài tập lớn Môn Lập trình NHT 1 + BTL
3 Làm việc với kiểu DirectoryInfo WO-centric loại đầu tiên bạn sẽ xem xét là khóa Directorylnfo Lớp này chứa một tập
hợp các thành viên được dùng để tạo, di chuyển, xóa, và liệt kê các thư mục và thư mục con
Ngoài phần chức năng riêng được cung cấp bởi lớp cơ sở (FileDirectoryInfo), Directorylnfo còn cung cấp bộ phận mã khóa chỉ tiết trong bảng 19-3:
GetDirectories() Tra v €mét mang cdc đối tượng Directorylnfo đại diện cho tất cả các
thư mục con trong thư mục hiện tại
GetFilesQ) Truy xuất một mảng các đối tượng Filelnfo đại diện cho một tập
hợp các tệp đã cho thư mục
MoveTo() Di chuyển một thư mục và nội dung của nó đến một đường dẫn mới
Root Lấy phần gốc của đường dẫn
Bảng 19 3 Các bộ phận mã khóa chỉ tiết
Bạn bất đầi làm việc với loại DirectorylInfo bằng cách chỉ định đường dẫn thư mục cụ thể làm tham số hàm tạo Hãy sử dụng ký hiệu dấu chấm (.) nếu bạn muốn truy cập vào thư mục làm việc hiện tại (thư mục của ứng dụng đang thực thì) Ở đây là một số ví dụ:
*|ConsoleApp1
Trong vi du thir hai, ban gia sir rang duong dan được truy vào ham tao (C:\ Windows) đã tồn tại trên máy vật lý Tuy nhiên, nếu bạn cố gắng tương tác với một thư mục không t®n tại, System.IO.DirectoryNotFoundException được ném ra Do đó, nếu bạn chỉ định
một thư mục chưa được tạo ra, bạn cần phải gọi phương thức CreateQ trước khi tiếp tục, như
Trang 10Bài tập lớn Môn Lập trình NHT 1 + BTL
Cú pháp đường dẫn đã được dùng trong ví dụ trước là Windows-centric Nếu bạn đang phát triển Net ứng dụng cho các nền tảng khác nhau, bạn nên sử dụng đường dẫn Path VolumeSeparatorChar và Path.DirectorySeparatorChar sẽ mang lại các ký tự phù hợp
dựa trên n`n tảng Cập nhật mã trước đó thành mã sau:
IÉ]ConsoleApp1 a à
$@"C{Path VoLuneSeparatorChar} {Path DirectorySeparatorChar}MyCode{Path DirectorySeparatorChar}Te
Sau khi bạn tạo một đối tượng DirectoryInfo, ban có thể tìm hiểu nội dung thư mục cơ
bản bằng cách sử dụng bất kỳ thuộc tính được thừa kế từ EileSystemlnfo Để thấy dia nay hoạt động, hãy tạo ứng dụng Console mới, dự án có tên là DirectoryApp và cập nhật tệp C# của bạn để nhập System và System.IO Cập nhật tệp Program.cs của bạn với phương thức tĩnh mới sau đây để tạo đối tượng DirectoryInfo được hướng tới C:\Windows (điâi chỉnh đường
dẫn của bạn nếu ch), hiển thị một số thống kê thú vị:
[I2 27.12 si
ConsoLe.WriteLine("++++* Fun with Directory(Info) *****+
ShowWindowsDirectoryInfo() ; Console ReadLine();
stat ShowwindowsDirectoryinfo()
i
not on Windo pLug in another directory
Path VoLumeSeparatorChar} {Path DirectorySeparatorChar}windows");
", dir.FuLLName);
dir.Name) ; dir.Parent) ;
xx*x** Fun with Directory(Info) *****
cán nho Directory Info ****x
Trang 11Bài tập lớn Môn Lập trình NHT 1 + BTL
3.1 Liệt kê các File có kiểu DirectoryInfo
Ngoài việc lấy chỉ tiết cơ bản của một thư mục đã có, bạn có thể mở rộng ví dụ hiện tại để sử dụng một số phương pháp thuộc loại Directorylnfo Thứ nhất, bạn có thể tận dung
phương thức GetFilesQ để lấy thông tin từ tất cả các tệp *.jpg nằm trong thu muc c:\
Windows\Web\Hinh n‘& (cap nhật thư mục này nếu cần thiết với một các có hình ảnh trên máy của bạn)
Phương thức GetFilesQ trả vêmột mảng các đối tượng Filelnfo, mỗi đối tượng hiển thị chỉ tiết v`Šmột File cụ thể (bạn sẽ tìm hiểu chi tiết đ% đủ v êloại Filelnfo sau trong chương
này) Tạo như sau phương thức tinh trong File Program.cs:
Lưu ý rằng bạn chỉ định tùy chọn tìm kiếm khi gọi GetFile(); bạn làm đi âi này để nhìn
vào trong tất cả các thư mục con của thư mục gốc Sau khi chạy ứng dụng, bạn sẽ thấy danh sách tất cả các tệp phù hợp với tìm kiếm mẫu
3.2 Tạo Thư mục Con với kiêu DirectoryInfo
Bạn có thể mở rộng cấu trúc thư mục theo chương trình bằng cách sử dụng DirectoryInfo.CreateSubdirectoryQ Phương thức này có thể tạo một thư mục con duy nhất cũng như nhi âi thư mục con l ng nhau trong một thư mục duy nhất Phương pháp nay minh
họa cách thực hiện, mở rộng cấu trúc thư mục của ứng dụng thư mục thực thi (ký hiệu là ) với một số thư mục con tùy chỉnh:
Trang 12Bài tập lớn Môn Lập trình NHT 1 + BTL
Bạn không cần phải nấm bất giá trị trả về của phương thức CreateSubdirectoryQ,
nhưng bạn nên lưu ý rằng đối tượng DirectorylInfo đại điện cho mục mới được tạo sẽ được trả
v`ềthành công Hãy xem xét cập nhật sau cho phương pháp trước đó:
Nếu bạn gọi phương thức này tử các câu lệnh cấp cao nhất và kiểm tra thư mục
Windows Explorer, bạn sẽ thấy các thư mục con mới hiện diện và được tính đến
4 Làm việc với kiêu Directory
Bạn đã thấy loại DirectoryInfo hoạt động, bây giờ bạn đã sẵn sàng tìm hiểu về loại Directory Trong hi hết các trường hợp, các thành viên tĩnh của Directory mô phỏng chức năng được cung cấp bởi các thành viên cấp đối tượng được định nghĩa bởi DirectoryInfo Tuy nhiên, hãy nhớ lại rằng các thành viên của Directory thưởng trả v`ềchuỗi data thay vì các đối twong FileInfo/DirectoryInfo
Bây giơ chúng ta hãy xem xét một số chức năng của loại Directory Hàm trợ giúp cuối cùng này hiển thị tên của tất cả các ổ đĩa được hướng tới máy tính hiện tại (sử dụng phương thức Directory.GetLogicalDriversQ) và sử dụng phương thức tĩnh Directory.DeleteQ để xóa
các thư mục con \MyFolder và \MyFolder2\Data được tạo trước đó
Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 13Bài tập lớn Môn Lập trình NHT 1 + BTL
5 Làm việc với kiều Drivelnfo
Namespace SystemIO cung cấp một lớp có tên Drivelnfo Giống như Directory.GetlogicalDrives(), phuorng thtrc static DriveInfo.GetDrivers() cho phép bạn khám phá tên các 6 dia của máy Tuy nhién, Dirctory.GetlogicalDrives(), DriveInfo cung cấp nhi `âi chỉ tiết khác (VD: loại ổ đĩa, dung lượng trống có sẵn và nhấn ổ đĩa) Hãy xem xét file Program.cs sau khi được xác định trong một tệp dự án ứng dụng mới có tên DrivelnfoApp:
Trang 146 Làm việc voi lop FileInfo
Như trong ví dụ DirectoryApp trước đây, lớp Filelnfo cho phép bạn thu thập chỉ tiết về các tập tin đã có trong ổ cứng (VD: thởi gian được tạo ra, kích thước và các thuộc tính) và hỗ trợ việc tạo, sao chép, di chuyển và hủy bỏ tập tin Ngoài tập hợp các chức năng được FileSystemlnfo kế thừa, bạn có thể tìm thấy một số thành viên cốt lối duy nhất của lớp FileInfo, được mô tả trong bang 19-4:
Member Meaning in Life
AppendText() Tạo một đối tượng StreamWriter (được mô tả sau) chấp thêm văn bản vào
tệp
CopyTo() Sao chép tệp hiện có sang tệp mới
Create( ) Tạo một tệp mới và trả v`Šmột đối tượng FileStream (được mô tả sau) để
tương tác với tệp mới được tạo
CreateText( ) Tạo một đối tượng StreamWriter viết một tệp văn bản mới
Delete() Xóa tệp mà phiên ban FileInfo bj rang budc
Directory Lấy một thể hiện của thư mục mẹ
DirectoryName Lấy đường dẫn đầy đủ đến thư mục mẹ
Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 15Bài tập lớn Môn Lập trình NHT 1 + BTL
Length Lấy kích thước của tệp hiện tại
MoveTo( ) Di chuyển một tệp được chỉ định đến một vị trí mới, cung cấp tùy chọn để
chỉ định tên tệp mới
Name Lấy tên của tệp
Open( ) Mở một tệp với nhi âi đặc quy & doc / ghi va chia sé khac nhau
OpenRead( ) Tạo một đối tượng FileStream chi doc
OpenText( ) Tạo một đối tượng StreamReader (được mô tả sau) đọc từ một tệp văn ban
hiện có
OpenWrite( ) Tạo một đối tượng EileStream chỉ ghi
Bang 19 4 Một số điểm đặc biệt trong lớp Eilelnfo
Lưu ý rằng phần lớn các phương thức của lớp Eilelnfo trả v` một đối tượng I/O-
centric cu thé (vi du: FileStream va StreamWriter) cho phép ban bat dai doc va ghi dit liéu vào (hoặc đọc từ) tệp được liên kết ở nhi `âi định dạng khác nhau Ban sé kiểm tra các loại này
chỉ trong giây lát; tuy nhiên, trước khi bạn thấy một ví dụ làm việc, bạn sẽ thấy hữu ích khi kiểm tra các cách khác nhau để có được một xử lý tệp bằng cách sử dụng loại lớp Filelnfo
6.l Phương thức FileInfo.Create()
Tập hợp các ví dụ tiếp theo đềầi nằm trong một Console Application có tên SimpleFilelO Một cách bạn có thể tạo một tập tin xử lý là sử dụng phương thức
FileInfo.Create(), nhu sau:
mGhi chú: những ví dụ này có thể đòi hỏi phải chạy tìm Visual Studio như một chuỗi, phụ thuộc vào quy ân hạn và cấu hình của ngươi dùng
Lưu ý rằng phương thức Eilelnfo.CreateQ trả về một đối tượng FileStream, hiển thị tính năng đ ông bộ và các thao tác ghi/đọc không đ ng bộ đến/từ tệp cơ bản (sẽ biết thêm chỉ tiết vê đi âi đó sau) Biết rằng đối tượng FileStream được FilelInfo.Create() trả vềcấp quy truy cập đọc/ghi đ% đủ cho tất cả nguoi ding D “ng thoi sau khi ban hoàn thành với đối
Trang 16Bài tập lớn Môn Lập trình NHT 1 + BTL
tượng FileStream hiện tại, bạn phải đảm bảo bạn đóng dấu vân tay để giải phóng các tài nguyên lu ềng không được quản lý cơ bản Cho rằng FileStream thực hiện Idisposable, bạn có thể sử dụng phạm vi sử dụng C# để cho phép trình biên dịch tạo ra logic phân tích (xem chương 8 để biết chỉ tiết), như vậy:
mGhi chú: phẦn lớn các ví dụ này trong chương này bao g ầm việc sử dụng câu lệnh Tôi có thể đã sử dụng cái mới sử dụng cú pháp khai báo, nhưng đã chọn không viết lại trong lệnh này để giữ các ví dụ tập trung vào System.IO các thành phần mà chúng tôi dang tìm kiếm
Hãy xem xét logic sau:
Phiên bản của phương thức OpenQ bị quá tải yêu câu ba tham số Tham số đầi tiên của phương thức Open() chỉ định đặc điểm chung của yêu cẦầi /O (VD: tạo một tệp mới, mở
một tệp hiện có và nối vào một tệp) mà bạn chỉ sử dụng bảng liệt kê FileMode (xem bảng 19-
5) để biết chỉ tiết), chẳng hạn như vậy:
Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 17Thông báo cho hệ đi âi hành để tạo một tệp mới Nếu nó đã tôn tại, một
IOException sẽ được ném ra
Thông báo cho hệ đi`âi hành để tạo một tệp mới Nếu nó đã tôn tại, nó sẽ
bị ghi đè
Mở một tệp hiện có Nếu tệp không tần tai, FileNotFoundException sé được ném
Mở tệp nếu nó t & tai; néu không, một tệp mới sẽ được tạo
Mở tệp hiện có và cất bớt tệp thành kích thước 0 byte
Mở tệp, di chuyển đến cuối tệp và bất đầi thao tác ghi (bạn chỉ có thể sử dụng cở này với lung chỉ ghi) Nếu tệp không tên tại, một tệp mới sẽ
được tạo
Bảng 19 5 Các thành viên ctia FileMode Enumeration
Bạn sử dụng tham số thứ hai của phương thức Open(Q, một giá trị từ bảng liệt kê
FileAccess, để xác định hành vi đọc/ghi của lu ng cơ bản, như sau:
Cuối cùng, tham số thứ ba của phương thức OpenQ, FileShare, chi dinh cach chia sé tệp giữa các trình xử lý tập tin khác Dưới đây là những cái tên cốt lõi:
Trang 18Bài tập lớn Môn Lập trình NHT 1 + BTL
6.3 Các phương thức FileInfo.OpenRead(Q) và FileInfo.OpenWrite(Q) Phương thức Filelnfo.OpenQ cho phép bạn lấy được phần xử lý tệp một cách linh hoạt, nhưng lớp Filelnfo cũng cung cấp các member có tên OpenReadQ và OpenWriteQ Như bạn có thể tưởng tượng, những phương pháp này trả vê một đối tượng FileStream chỉ đọc hoặc chỉ ghi được cấu hình đúng mà không cẦn cung cấp nhỉ âi các giá trị liệt kê Giống như
FileInfo.Create() va FileInfo.Open(), OpenReadQ va OpenWrite() tra vé mét ddi tượng FileStream
Lưu ý rằng phương thức OpenRead() yêu cu tệp phải tên tại Đoạn mã sau tao tập tin
và sau đó đóng FileStream để phương thức OpenReadQ có thể sử dụng nó:
6.4 Phương thức FileInfo.Open Iext()
Một thành viên không sẵn cùng kiểu FileInfo 1a OpenText() Không giống như Create(), OpenQ, OpenRead(), hoặc OpenWrite(Q, phương thức OpenTextQ) trả v`ềmột thể loại
Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 19Bài tập lớn Môn Lập trình NHT 1 + BTL
của kiểu StreamReader, thay vì một loại EileStream Giải sử bạn có một tệp có tên là boot.ini
trên ổ C:, đoạn mã sau sẽ cung cấp cho bạn truy cập vào nội dung của nó:
Như bạn sẽ thấy ngay sau đây, loại StreamReader cung cấp một cách để đọc dữ liệu ký
tự từ tệp cơ bản
6.5 Cac phwong thire FileInfo.CreateText() va FileInfo.AppendText() Hai phuong thirc FileInfo quan tam cudéi cing tai thoi diém 1a CreateText() va
AppendText() Cả hai đều trả lại một đối tượng StreamWriter, như được hiển thị ở đây:
Như bạn có thể đoán, các loại StreamWriter cung cấp một cách để ghi dữ liệu ký tự
vào tập tin bên trong
7, Làm việc cùng các Tập tin
Loại tệp sử dụng một số thành viên tĩnh để cung cấp chức năng gần giống với chức năng của loại Filelnfo Giống như Filelnfo, File cung cấp AppendText(), Create(Q),
CreateText(), Open(), OpenRead(), OpenWrite() va OpenText() Trong nhi `âi trưởng hợp, bạn
có thể sử dụng các loại File va Hilelnfo có thể thay thế cho nhau Lưu ý rằng OpenText() va OpenReadQ yêu cần tệp phải t ân tại Để thấy đi âi này trong thực tế, thay vào đó, bạn có thể đơn giản hóa từng ví dụ v`ềFileStream trước đó bằng cách sử dụng loại File, như vậy:
Trang 20Bài tập lớn Môn Lập trình NHT 1 + BTL
Member tập trung vào Eile bỗ sung
Loại File cung hỗ trợ một số thành viên, được hiển thị trong bảng 19-6, có thể đơn
giản hóa đáng kể quy trình đọc và ghi dữ liệu văn bản
Mở tệp được chỉ định, ghi ra mảng byte và sau đó đóng tệp
Mở một tệp được chỉ định, ghi ra một mảng chuỗi, sau đó đóng tệp
Mở một tệp được chỉ định, ghi dữ liệu ký tự từ một chuỗi được chỉ định, sau đó đóng tệp
Bảng 19 6 Phương pháp của loại tệp
Bạn có thể sử dụng các phương pháp này của loại tệp để đọc và ghi hàng loạt dữ liệu chỉ trong một vài dòng mã Thậm chí tốt hơn, mỗi thành viên này sẽ tự động đóng xử lý tệp
Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 21Bài tập lớn Môn Lập trình NHT 1 + BTL
cơ bản Chẳng hạn đoạn mã sau đây duy trì dữ liệu chuỗi vào một tệp mới trên ổ C: (và đọc
nó vào bộ nhớ) với phi â phức tối thiểu:
Bài học ở đây là khi bạn muốn có được một file xử lý một cách nhanh chóng thì kiểu
file sẽ giúp bạn tiết kiệm được các lần nhấn phím Tuy nhiên, một lợi ích của việc tạo đối
tượng Filelnfo trước tiên là bạn có thể đi âu tra tệp bằng cách sử dụng các thành viên của lớp
cơ sở FileSystemlnfo trừu tượng
8 Lớp Stream Trừu tượng
Tại thời điểm này, bạn đã thấy nhiềâi cách để có được các đối tượng FileStream, StreamReader và StreamWriter, nhưng bạn vẫn chưa đọc dữ liệu hoặc ghi dữ liệu vào tệp
bằng các loại này Để hiểu cách thực hiện đi âu này, bạn sẽ cẦn phải làm quen với khái niệm về
Stream Trong thế giới thao tác I / O, một Stream đại diện cho một khối dữ liệu chảy giữa
ngu ân và đích Stream cung cấp một cách phổ biến để tương tác với một chuỗi byte, bất kể
loại thiết bị nào (ví dụ: tệp, kết nối mạng hoặc máy ¡n) lưu trữ hoặc hiển thị các byte được đề cập
Lớp System.IO.Stream trừu tượng định nghĩa một số thành viên cung cấp hỗ trợ đồng
bộ và các tương tác không đồng bộ với phương tiện lưu trữ (ví dụ: tệp hoặc vị trí bộ nhớ cơ
bản)
m Lưu ý: Khái niệm v`ềlu ông (Stream) không giới hạn ở Eile I/O Để chắc chấn, các thư viện NET cung cấp quy ân truy cập lu “ng tới mạng, vị trí bộ nhớ và các trừu tượng tập trung vào lu ng khác
Một lần nữa, hậu duệ của Stream đại diện cho dữ liệu dưới dạng một lu ông byte thô;
do đó, làm việc trực tiếp với lu ông thô có thể khá khó hiểu Một số loại có ngu tn gốc từ lung
hé tro’ tim kiếm, đ cập đến quá trình của việc thu thập và đi`âi chỉnh vị trí hiện tại trong
Trang 22Bài tập lớn Môn Lập trình NHT 1 + BTL
luồng Bảng 19-7 giúp bạn hiểunchức năng được cung cấp bởi lớp Stream bằng cách mô tả
các thành viên cốt lõi của nó
Xác định xem lu tng hién tai cd hé tro’ doc, tim va/hodc viet hay khéng
Đóng lu ông hiện tại và giải phóng bất kỳ tài nguyên nào (chẳng hạn như ổ cấm và xử lý tệp) được liên kết với lu ng hiện tại Trong nội bộ, phương thức này được đặt bí danh là phương pháp DisposeQ; do đó, việc đóng một
lu ông có chức năng tương đương với việc xử lý một lu ng
Cập nhật ngu n dữ liệu cơ bản hoặc kho lưu trữ với trạng thái hiện tại của
bộ đệm và sau đó xóa bộ đệm Nếu một lung không thực hiện bộ đệm,
phương pháp này không làm gì cả
Tra v €d6 dai cha lu ng tinh bang byte
Xác định vị trí trong lu ông hiện tại
Đọc một chuỗi byte (hoặc một byte) từ luồng hiện tại và nâng cao vị trí
hiện tại trong lu ông theo số by(e đọc
Đặt vị trí trong lu ng hiện tại
Đặt độ dài của lu ng hiện tại
Ghi một chuỗi byte (hoặc một byte) vào lu ông hiện tại và tiến lên vị trí hiện
tại trong lu ng này theo số byte được viết
Bảng 19 7 Abstract Stream Members
8.1 Làm việc cùng với FileStreams
Lớp HileStream cung cấp cách triển khai cho các thành viên Stream trửu tượng theo cách thích hợp để phát trực tuyến dựa trên tệp Đó là một dòng nguyên thủy; nó chỉ có thể đọc hoặc ghi một byte đơn hoặc một mảng số byte Tuy nhiên, bạn sẽ không thưởng xuyên cẦn phải tương tác trực tiếp với các thành viên của loại HileStream
Thay vào đó, có thể bạn sẽ sử dụng các trình bao bọc lu ng khác nhau, giúp làm việc với dữ liệu văn bản dễ dàng hơn hoặc các loại NET Tuy nhiên, bạn sẽ thấy hữu ích khi thử nghiệm với các khả năng đọc / ghi đ ông bộ của loại FileStream
Trang 23Bài tập lớn Môn Lập trình NHT 1 + BTL
Giả sử bạn có một dự án Console Application mới có tên FileStreamApp (và xác minh
rằng namspace System.Text được nhập vào tệp mã C# ban đầu của bạn) Mục tiêu của bạn là
viết một tin nhấn văn bản đơn giản cho một tệp mới có tên myMessage.dat Tuy nhiên, cho rang FileStream chi có thể hoạt động trên byte thô nên bạn sẽ cần thiết để mã hóa kiểu System.String thành một mảng byte tương ứng May mắn thay, namespace System.Text xác định một kiểu có tên Encoding cung cấp cho các thành viên mã hóa và giải mã chuỗi thành (hoặc từ) một mảng byte
Sau khi được mã hóa, mảng byte sẽ được lưu vào tệp bằng để phương thức FileStream.WriteQ Để đọc byte trở lại bộ nhớ, bạn phải đặt lại vị trí bên trong của lu ng (sử dụng thuộc tính Vị tr0 và gọi phương thức ReadByte(Q) Cuối cùng, bạn hiển thị mảng byte thô
và chuỗi được giải mã tới bảng đi `âi khiển Đây là mã đầy đủ:
Ví dụ này đi dữ liệu vào tệp, nhưng nó cũng nhấn mạnh điểm yếu lớn của việc làm việc trực tiếp với loại FileStream: nó yêu cầi hoạt động trên byte thô Các loại có ngu ồn gốc
từ lu êng khác hoạt động trong một cách tương tự Ví dụ: nếu bạn muốn ghi một chuỗi byte vào một vùng bộ nhớ, bạn có thể phân bổ một MemoryStream
Như đã đ êcập trước đây, namspace System.IO cung cấp một số kiểu tình đọc và trình ghi gói gọn các chỉ tiết làm việc với các loại có ngu ôn gốc tử Stream
Trang 24Bài tập lớn Môn Lập trình NHT 1 + BTL
9, Làm việc cùng StreamWriters and StreamReader
Các lớp StreamWriter và StreamReader rất hữu ích bất cứ khi nào bạn cẦn đọc hoặc ghi dựa trên ký tự dữ liệu (ví dụ: chuỗi) Cả hai đâi hoạt động theo mặc định với các ký tự
Unicode; tuy nhiên, bạn có thể thay đổi đi `âi này bằng cách cung cấp một tham chiếu đối tượng System.Text.Encoding được cấu hình đúng Để đơn giản hóa mọi việc, hãy giả sử rằng
mã hóa Unicode mặc định phù hợp với yêu câu
StreamReader bất ngu từ một kiểu trừu tượng có tên TextReader, cũng như kiểu StringReader liên quan (thảo luận sau trong chương này) Lớp cơ sở TextReader cung cấp một tập hợp các chức năng giới hạn cho mỗi của những hậu duệ này; cụ thể, nó cung cấp khả năng
đọc và xem nahnh vào một lu ông ký tự
Loại StreamWriter (cũng như StringWriter, mà bạn sẽ xem xét sau trong chương này) bất ngu ồn từ một lớp cơ sở trờu tượng có tên TextWriter Lớp này định nghĩa các thành viên cho phép các kiểu dẫn xuất viết dữ liệu văn bản đến một lu Ông ký tự nhất định
Để giúp bạn hiểu rõ hơn v`ề khả năng viết cốt lõi của StreamWriter va StringWriter, bang 19-8 mô tả các thành viên cốt lõi của lớp cơ sở TextWriter trừu tượng
Member Meaning in Life
CloseQ Phương thức này đóng người viết và giải phóng mọi tài nguyên liên
quan Trong quá trình này, các bộ đệm được tự động xóa (một lần nữa,
thành viên này có chức năng tương đương với cuộc gọi phương thức
Dispose()
Flush) Phương thức này xóa tất cả các bộ đệm cho người viết hiện tại và gây
ra bất kỳ dữ liệu được đệm nào được ghi vào thiết bị cơ bản; tuy nhiên,
nó không đóng cửa nhà văn
NewLine Thuộc tính này cho biết hằng số dòng mới cho lớp writer dẫn xuất
Mặc định di kết thúc dòng cho HDH Windows là dấu xuống dòng,
theo sau là một ngu Ân cấp dữ liệu dòng (n)
WriteLine() Phương pháp quá tải này ghi dữ liệu vào lu (ng văn bản mà không có WriteAsync() hằng số dòng mới
WriteLine() Phương pháp quá tải này ghi dữ liệu vào lung văn bản với hang số WriteLineAsync() dòng mới
Bảng 19 8 Các thành viên cốt lõi của TextWriter
Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 25Bài tập lớn Môn Lập trình NHT 1 + BTL
Lưu ý: Hai thành viên cuối cùng của lớp TexfWriter có thể trông quen thuộc với bạn
Nếu bạn nhớ lại, System.Console có các thành phần WriteQ và WriteLine(Q) đẩy dữ liệu văn bản đến thiết bị đầi ra tiêu chuẩn Trong thực tế, thuộc tính Console.ln bao bọc một TextReader
Lớp StreamWriter dẫn xuất cung cấp một cách triển khai thích hợp cho Write(),
Close(Q và các phương thức Flush(), và nó định nghĩa thuộc tính AutoFlush bổ sung Khi được đặt thành true, thuộc tính này buộc phải StreamWriter để xóa tất cả dữ liệu mỗi khi bạn thực
hiện thao tác ghi Hãy lưu ý rằng bạn có thể đạt được tốt hơn hiệu suất bằng cách thiết lập
AutoHIush thành false, miễn là bạn luôn gọi CloseQ khi bạn viết xong bằng một StreamWriter
9.1 Viết vào một tập tin van ban
ĐỂ xem loại StreamWriter đang hoạt động, hãy tạo một dự án Console Application
mới có tên StreamWriterReaderApp Đoạn mã sau đây tạo một tệp mới có tên Reminder.txt trong tệp hiện tại thư mục thực thi, sử dụng phương thức File.CreateTextQ) Sử dụng đối tượng
StreamWriter thu được, bạn có thể thêm một số dữ liệu văn bản vào tệp mới
Sau khi bạn chạy chương trình này, bạn có thể kiểm tra nội dung của tệp mới này Bạn
sẽ tìm thấy tệp này trong thư mục gốc của dự án của bạn (Visual Studio Code) hoặc trong thư mục bin\Debugnet6.0 (Visual Studio) vì bạn không chỉ định đường dẫn tuyệt đối tại thời điểm bạn gọi Create IextQ và v] trí tệp mặc định là thư mục thực thi hiện tại của assembly
9.2 Đọc từ một tệp tin van ban
Tiếp theo, bạn sẽ học cách đọc dữ liệu từ một tệp theo chương trình bằng cách sử dụng
StreamReader tương ứng kiểu Hãy nhớ lại rằng lớp này bất ngu ên từ TextReader trừu tượng, cung cấp chức năng được mô tả trong bảng 19-9
Trang 26Bài tập lớn Môn Lập trình NHT 1 + BTL
Member Meaning in life
PeekQ Trả v`êký tự có sẵn tiếp theo (được biểu thị dưới đạng số nguyên) mà
không thay đổi vị trí của người đọc Giá trị -1 cho biết bạn đang ở cuối lu ông
ReadQ Đọc dữ liệu từ lung đầi vào
Bang 19 9 Thành viên cốt lõi của IextReader
Nếu bây giở bạn mở rộng ứng dụng mẫu hiện tại để sử dụng StreamReader, bạn có thể đọc trong văn bản dữ liệu từ file reminders.txt, như được hiển thị ở đây:
Sau khi chạy chương trình, bạn sẽ thấy dữ liệu ký tự trong reminders.txt hiển thị trên bảng đi âi khiển
Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 27Bài tập lớn Môn Lập trình NHT 1 + BTL
9.3 Tạo trực tiếp các loại StreamWriter / StreamReader
Một trong những khía cạnh khó hiểu khi làm việc với các loại trong System.IO là bạn
thường có thể đạt được một kết quả giống hệt nhau bằng cách sử dụng các phương thức khác
nhau Ví dụ: bạn đã thấy rằng bạn có thể sử dụng phương thức CreateText() để có được một StreamWriter với kiểu File hoặc Filelnfo Nó xảy ra như vậy mà bạn có thể làm việc với StreamWriters và StreamReader theo một cách khác: bằng cách tạo chúng trực tiếp Ví dụ: bạn có thể trang bị thêm cho ứng dụng hiện tại như sau:
Mặc dù có thể hơi khó hiểu khi thấy rất nhi âi cách tiếp cận dưỡng như giống hệt nhau đối với File I / O, hấy nhớ rằng kết quả là tính linh hoạt cao hơn Trong mọi trưởng hợp, bây giờ bạn đã sẵn sàng để kiểm tra vai trò của các lớp StringWriter và StringReader, cho rằng bạn đã thấy cách di chuyển đữ liệu ký tự đến và đi từ một tệp đã cho bằng cách sử dụng các
loai StreamWriter va StreamReader
10 Lam Viéc voi StringWriters va StringReaders
Ban có thể sử dụng các kiểu StringWriter và StringReader để xử lý thông tin văn bản dưới dạng một lung ký tự trong bộ nhớ Đi`âi này có thể hữu ích khi bạn muốn thêm thông
tin dựa trên ký tự vào một bộ đệm cơ bản Dự án Console Application sau đây có tên
StringReaderWriterApp minh hoa, di@i nay bang cach ghi một khối dữ liệu chuỗi vào đối tượng StringWriter, thay vì vào một tệp trên ổ cứng cục bộ (đừng quên nhập System.TexÐ):
Trang 28Bài tập lớn Môn Lập trình NHT 1 + BTL
StringWriter và StreamWriter đâi xuất phát từ cùng một lớp cơ sở (TextWriter), do đó cách viết logic là tương tự Tuy nhiên, do tính chất của StringWriter, bạn cũng nên lưu ý rằng lớp này cho phép bạn sử dụng phương thức GetStringBuilderQ sau đây để trích xuất một đối tượng Sys(em Text.StringBuilder:
Khi bạn muốn đọc từ một lu ng dữ liệu ký tự, bạn có thể sử dụng StringReader tương
ứng, loại này hoạt động giống hệt với lớp StreamReader có liên quan Trên thực tế lớp StringReader không làm gì khác hơn là ghi đè các thành viên được kế thửa để đọc một khối
dữ liệu ký tự, chứ không phải tử một tệp, như được hiển thị dưới đây:
11, Làm việc với BimaryWriters và BmaryReaders
Bộ ghiđọc cuối cùng mà bạn sẽ xem xét trong phần này là BinaryReader và BinaryWriter Cả hai lấy trực tiếp từ System.Object Những kiểu này cho phép bạn đọc và ghi các kiểu dữ liệu rởi rạc vào một luồng cơ bản ở định dạng nhị phân nhỏ gọn Lớp BinaryWriter định nghĩa phương thức WriteQ bị quá tải cao phương pháp đặt một kiểu dữ liệu trong lu ông cơ bản Ngoài thành viên WriteQ, BinaryWriter cung cấp các thành viên bổ sung cho phép bạn nhận hoặc đặt loại có ngu gốc từ Lu ông; nó cũng cung cấp hỗ trợ cho truy
cập ngẫu nhiên vào dữ liệu (xem Bảng 19-10)
Member Meaning in life
BaseStream Thuộc tính chỉ đọc này cung cấp quy*â truy cập vào lung cơ bản được sử Nguyễn Quang Hải (2121050617) Nhóm 12
Trang 29Bài tập lớn Môn Lập trình NHT 1 + BTL
dụng với BinaryWriter sự vật
CloseQ Phương pháp này đóng lu ông nhị phân
FlushQ Phương pháp này xóa lu ng nhị phân
Seek() Phương pháp này đặt vị trí trong lu ông hiện tại
WriteQ Phương thức này ghi một giá trị vào lu ông hiện tại
Bang 19 10 Thành viên cốt lối của BinaryWriter
Lớp BinaryReader bổ sung chức năng do BinaryWriter cung cấp với các thành viên được mô tả trong Bảng 19-11
Member Meaning in Life
BaseStream Thuộc tính chỉ đọc này cung cấp quy truy cập vào lung cơ bản được sử
dụng với đối tượng BinaryReader
CloseQ Phương pháp này đóng trình đọc nhị phân
PeekChar() Phuong thitc nay tra véky tự có sẵn tiếp theo mà không nâng cao vị trí
trong lu ông
ReadQ) Phương thức này đọc một tập hợp byte hoặc ký tự nhất định và lưu trữ
chúng trong mảng đến
Bảng 19 11 Thành viên cốt lõi của BinaryReader
Ví dụ sau (dự án Console Application có tên BinaryWriterReader sử dung System.IO)
ghi một số loại dữ liệu vào tệp *.dat file: