1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập lớn môn lập trình net 1 + btl Đề tài file i o and object serialization

58 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề File I/O And Object Serialization
Tác giả Bựi Thị Phượng, Nguyễn Quang Hải, Ngụ Nam Hải, Nguyễn Thụ Hoàng Vũ
Người hướng dẫn Phạm Văn Đồng, Nguyễn Quang Hải
Trường học Trường Đại Học Mỏ - Địa Chất
Chuyên ngành Lập Trình .Net 1 + BTL
Thể loại Bài Tập Lớn
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 58
Dung lượng 4,44 MB

Nội dung

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 1

BỘ 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 2

CHƯƠ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 3

Bà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 4

Bà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 5

Bà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 6

Bà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 7

Bà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 8

Bà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 9

Bà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 10

Bà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 11

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ố 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 12

Bà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 13

Bà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 14

6 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 15

Bà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 16

Bà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 17

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, 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 18

Bà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 19

Bà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 20

Bà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 21

Bà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 22

Bà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 23

Bà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 24

Bà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 25

Bà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 26

Bà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 27

Bà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 28

Bà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 29

Bà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:

Ngày đăng: 11/12/2024, 13:01