3.Đ c m t đ i t ọc một đối tượng từ tệp nhị phân ột đối tượng vào tệp nhị phân ối tượng vào tệp nhị phân ượng vào tệp nhị phân ng t t p nh phân ừ tệp nhị phân ệp nhị phân ị phân//doc doi
Trang 1Báo Cáo Bài T p L n ập Lớn ớn
Gi ng viên hảng viên hướng dẫn: ướnng d n: ẫn: Ngô Công Th ng ắng
Nhóm sinh viên th c hi n :(Nhóm 10)ực hiện :(Nhóm 10) ện :(Nhóm 10)
Nguy n Th Senễn Thị Sen ị Sen
Nguy n Th Di pễn Thị Sen ị Sen ện :(Nhóm 10)
Ph m Ng c Th ngạm Ngọc Thắng ọc Thắng ắng
Hoàng Th Ngaị Sen
L p: Tin H c C-k52ớn ọc Thắng
Trang 2
Ph n 1:Lý Thuy t ần 1:Lý Thuyết ết
A.Tìm hi u v vào/ra v i t p nh phân ểu về vào/ra với tệp nhị phân ề vào/ra với tệp nhị phân ới tệp nhị phân ệp nhị phân ị phân
1.Vào ra t p nh phân b ng read và write ện :(Nhóm 10) ị Sen ằng read và write
2.Ghi m t đ i t ột đối tượng vào tệp nhị phân ối tượng vào tệp nhị phân ượng vào tệp nhị phân ng vào t p nh phân ện :(Nhóm 10) ị Sen
3.Đ c m t đ i t ọc Thắng ột đối tượng vào tệp nhị phân ối tượng vào tệp nhị phân ượng vào tệp nhị phân ng t t p nh phân ừ tệp nhị phân ện :(Nhóm 10) ị Sen
B.K thu t b t l i vào ra t p ỹ thuật bắt lỗi vào ra tệp ật bắt lỗi vào ra tệp ắng ỗi vào ra tệp ệp nhị phân
C Con tr t p ỏ tệp ệp nhị phân
1.Khái ni m ện :(Nhóm 10)
2.Toán t l y đ a ch (&) ử lấy địa chỉ (&) ấy địa chỉ (&) ị Sen ỉ (&).
3.Toán t tham chi u ử lấy địa chỉ (&) ếu
Trang 3A Tìm hi u v vào/ra v i t p nh phân ểu về vào/ra với tệp nhị phân ề vào/ra với tệp nhị phân ới tệp nhị phân ệp nhị phân ị phân
Đ m m t t p dể mở một tệp dưới chế độ nhị phân, ta dùng cú ở một tệp dưới chế độ nhị phân, ta dùng cú ột đối tượng vào tệp nhị phân ện :(Nhóm 10) ướni ch đ nh phân, ta dùng cú ếu ột đối tượng vào tệp nhị phân ị Sen
pháp sau:
fstream <Tên bi n t p> (<Tên t p>, ios: : binary) ;ếu ện :(Nhóm 10) ện :(Nhóm 10)
Khi đó, các thao tác đ c, ghi trên bi n t p đọc Thắng ếu ện :(Nhóm 10) ượng vào tệp nhị phânc th c ực hiện :(Nhóm 10)
hi nện :(Nhóm 10)
Theo đ n v byte theo kích thơn vị byte theo kích thước các bản ghi (cấu ị Sen ướnc các b n ghi (c u ảng viên hướng dẫn: ấy địa chỉ (&)
trúc) đượng vào tệp nhị phânc ghi trong t p.ện :(Nhóm 10)
Ví d : ụ: Mu n m t p tin baitho.txt dối tượng vào tệp nhị phân ở một tệp dưới chế độ nhị phân, ta dùng cú ện :(Nhóm 10) ướni ch đ nh ếu ột đối tượng vào tệp nhị phân ị Sen
fstream myBaiTho (“baitho.txt”, ios: :binary);
Trang 41.Vào ra t p nh phân b ng read và write ệp nhị phân ị phân ằng read và write
a Ghi vào t p nh phân b ng write: ệp nhị phân ị phân ằng read và write
Các bướnc th c hi n đ ghi d li u vào m t t p nh ực hiện :(Nhóm 10) ện :(Nhóm 10) ể mở một tệp dưới chế độ nhị phân, ta dùng cú ữ liệu vào một tệp nhị ện :(Nhóm 10) ột đối tượng vào tệp nhị phân ện :(Nhóm 10) ị Sen
M t p tin theo ch đ đ ghi nh phân b ng đ i ở một tệp dưới chế độ nhị phân, ta dùng cú ện :(Nhóm 10) ếu ột đối tượng vào tệp nhị phân ể mở một tệp dưới chế độ nhị phân, ta dùng cú ị Sen ằng read và write ối tượng vào tệp nhị phân
tượng vào tệp nhị phânng fstream:
fstream <Tên bi n t p> (<Tên t p tin>, ios: : out I ếu ện :(Nhóm 10) ện :(Nhóm 10)
ios: : binary) ;
Ghi d li u vào t p b ng thao tác “write()”:ữ liệu vào một tệp nhị ện :(Nhóm 10) ện :(Nhóm 10) ằng read và write
<Tên bi n t p> write (char* <D li u>,ếu ện :(Nhóm 10) ữ liệu vào một tệp nhị ện :(Nhóm 10)
int <Kích thướnc d li u>) ;ữ liệu vào một tệp nhị ện :(Nhóm 10)
Đóng t p tin b ng l nh close():ện :(Nhóm 10) ằng read và write ện :(Nhóm 10)
<Tên bi n t p>.close ( ) ;ếu ện :(Nhóm 10)
Trang 5 Trong đó, thao tác write nh n hai tham s ập Lớn ối tượng vào tệp nhị phân
Đ u vào nh sau:ầu vào như sau: ư
Tham s th c nh t: là con tr ki u char tr đ n ối tượng vào tệp nhị phân ức nhất: là con trỏ kiểu char trỏ đến ấy địa chỉ (&) ỏ tệp ể mở một tệp dưới chế độ nhị phân, ta dùng cú ỏ tệp ếu
vùng d li u c n ghi và t p Vì con tr b t bu c có ữ liệu vào một tệp nhị ện :(Nhóm 10) ầu vào như sau: ện :(Nhóm 10) ỏ tệp ắng ột đối tượng vào tệp nhị phân
ki u char nên khi mu n ghi d ki u có ki u khác vào ể mở một tệp dưới chế độ nhị phân, ta dùng cú ối tượng vào tệp nhị phân ữ liệu vào một tệp nhị ện :(Nhóm 10) ể mở một tệp dưới chế độ nhị phân, ta dùng cú
t p, ta dùng hàm chuy n ki u: ện :(Nhóm 10) ể mở một tệp dưới chế độ nhị phân, ta dùng cú ể mở một tệp dưới chế độ nhị phân, ta dùng cú
reinterpret_cast<char *> (<D li u>) ;ữ liệu vào một tệp nhị ện :(Nhóm 10)
Tham s th hai là kích c d li u đối tượng vào tệp nhị phân ức nhất: là con trỏ kiểu char trỏ đến ỡ dữ liệu được ghi vào tệp ữ liệu vào một tệp nhị ện :(Nhóm 10) ượng vào tệp nhị phânc ghi vào t p ện :(Nhóm 10)Kích c này đớn ượng vào tệp nhị phânc tính theo byte, nên thông thường ng
ta dùng toán t :ử lấy địa chỉ (&)
sizeof (<Ki u d li u>) ;ể mở một tệp dưới chế độ nhị phân, ta dùng cú ữ liệu vào một tệp nhị ện :(Nhóm 10)
Trang 6 Các bướnc th c hi n đ đ c d li u t m t t p tin nh ực hiện :(Nhóm 10) ện :(Nhóm 10) ể mở một tệp dưới chế độ nhị phân, ta dùng cú ọc Thắng ữ liệu vào một tệp nhị ện :(Nhóm 10) ừ tệp nhị phân ột đối tượng vào tệp nhị phân ện :(Nhóm 10) ị Sen
M t p tin theo ch đ đ đ c nh phân b ng đ i ở một tệp dưới chế độ nhị phân, ta dùng cú ện :(Nhóm 10) ếu ột đối tượng vào tệp nhị phân ể mở một tệp dưới chế độ nhị phân, ta dùng cú ọc Thắng ị Sen ằng read và write ối tượng vào tệp nhị phân
tượng vào tệp nhị phânng fstream ( m t p tin ch đ ghi): fstream ở một tệp dưới chế độ nhị phân, ta dùng cú ện :(Nhóm 10) ỉ (&) ể mở một tệp dưới chế độ nhị phân, ta dùng cú <Tên bi n t p> (<Tên t p tin>, ios: : I ios: :binary) ;ếu ện :(Nhóm 10) ện :(Nhóm 10)
Đ c d li u t t p b ng thao tác “read()”:ọc Thắng ữ liệu vào một tệp nhị ện :(Nhóm 10) ừ tệp nhị phân ện :(Nhóm 10) ằng read và write
<Tên bi n t p>.read (char* <D li u ra>,ếu ện :(Nhóm 10) ữ liệu vào một tệp nhị ện :(Nhóm 10)
int <Kích thướnc d li u>) ;ữ liệu vào một tệp nhị ện :(Nhóm 10)
Đóng t p tin b ng l nh close():ện :(Nhóm 10) ằng read và write ện :(Nhóm 10)
<Tên bi n t p>.close( ) ;ếu ện :(Nhóm 10)
b Đ c d li u t t p nh phân b ng ọc dữ liệu từ tệp nhị phân bằng ữ liệu từ tệp nhị phân bằng ệp nhị phân ừng phần tử của tệp ệp nhị phân ị phân ằng read và write
read
Trang 72 Ghi m t đ i t ột đối tượng vào tệp nhị phân ối tượng vào tệp nhị phân ượng vào tệp nhị phân ng vào t p nh phân ệp nhị phân ị phân
//ghi đoi tuong person ra dia
#include<fstream.h>// cho vao ra file
class person //lop person
{
protected:
char name[40]; //ten nguoi
int age; //tuoi
public:
void getData() //lay du lieu
{
cout<<”\nNhap vao ten:”;cin>>name;
cout<<”\nNhap vao tuoi:”;cin>>age;
}
Trang 8void main()
{
person pers;//tao mot doi tuong person
pers.getData();//lay du lieu cho nguoi
ofstream outfile(“PERSON.DAT”,ios::binary);tao mot doi tuong ofstream
outfile.write((char*)&pers,sizeof(pers)); //ghirano }
Trang 93.Đ c m t đ i t ọc một đối tượng từ tệp nhị phân ột đối tượng vào tệp nhị phân ối tượng vào tệp nhị phân ượng vào tệp nhị phân ng t t p nh phân ừ tệp nhị phân ệp nhị phân ị phân
//doc doi tuong person tu dia
#include<fstream.h> //cho vao ra file
class person //lop person
{
protected:
char name[40]; //ten nguoi
int age; //tuoi
public:
void showData()//hien thi du lieu
{ cout<<”\nTen:”<<name;
cout<<”\nTuoi:”<<age;
} };
Trang 10void main()
{
person pers; //tao mot doi tuong person
ifstream infile(“PERSON.DAT”,ios::binary);//tao mot doi tuong ifstream
infile.read((char*)&pers,sizeof(pers));//doc no }
Trang 114 Vào ra nhi u đ i t ều đối tượng ối tượng vào tệp nhị phân ượng vào tệp nhị phân ng
//doc va ghi doi tuong person ra dia
#include<fstream.h> //cho va ra file
Class person //lop person
{
protected:
char name[40]; //ten nguoi
public:
{
cout<<”\nNhap vao ten:”;cin>>name;
cout<<”\nNhap vao tuoi:”;cin>>age;
Trang 12void main()
{
person pers;//tao mot bien person
char ch;
fstream file;//tao mot file vao va ra
//mo de ghi them vao
file.open(“PERSON.DAT’,ios::app | ios::out | ios::in | ios::binary);
//lay du lieu tu nguoi su dung de ghi ra
//file
do
{
cout<<”\nNhap du lieu cho nguoi:”;
pers.getData();//lay du lieu cua mot nguoi
file.write((char*)&pers,sizeof(pers));//ghi no ra diacout<<”Co nhap nua khong(c/k)?”;
cin>>ch;
}
Trang 13}
Trang 14B.K thu t b t l i vào/ra t p ỹ thuật bắt lỗi vào ra tệp ật bắt lỗi vào ra tệp ắng ỗi vào ra tệp ệp nhị phân
Khi làm vi c v i t p không ph i luôn luôn suôn ện :(Nhóm 10) ớn ện :(Nhóm 10) ảng viên hướng dẫn:
s ,thẻ,thường xảy ra một số trục trặc, ví dụ như: ường ng x y ra m t s tr c tr c, ví d nh :ảng viên hướng dẫn: ột đối tượng vào tệp nhị phân ối tượng vào tệp nhị phân ụ ặc, ví dụ như: ụ ư
M t p đ đ c nh ng t p không t n t iở một tệp dưới chế độ nhị phân, ta dùng cú ện :(Nhóm 10) ể mở một tệp dưới chế độ nhị phân, ta dùng cú ọc Thắng ư ện :(Nhóm 10) ồn tại ạm Ngọc Thắng
Ghi t p nh ng không gian đĩa đã đ yện :(Nhóm 10) ư ầu vào như sau:
T o t p nh ng đĩa h ng, đĩa c m ghi ho c đĩa ạm Ngọc Thắng ện :(Nhóm 10) ư ỏ tệp ấy địa chỉ (&) ặc, ví dụ như:
đã đ yầu vào như sau:
Ho c tên t p đ t không h p lặc, ví dụ như: ện :(Nhóm 10) ặc, ví dụ như: ợng vào tệp nhị phân ện :(Nhóm 10)
S d ng tham s mode ch a chính xác d n t i ử lấy địa chỉ (&) ụ ối tượng vào tệp nhị phân ư ẫn: ớn
chươn vị byte theo kích thước các bản ghi (cấu ng trình ch y b l i.ạm Ngọc Thắng ị Sen ỗi
Đ c d li u nh ng con tr t p đã cu i t p.ọc Thắng ữ liệu vào một tệp nhị ện :(Nhóm 10) ư ỏ tệp ện :(Nhóm 10) ở một tệp dưới chế độ nhị phân, ta dùng cú ối tượng vào tệp nhị phân ện :(Nhóm 10)
Trang 15 Tóm l i ại ,khi làm vi c v i t p thện :(Nhóm 10) ớn ện :(Nhóm 10) ường ng g p nhi u l i ặc, ví dụ như: ều lỗi ỗi.khác nhau, n u không bi t cách phát hi n x lý thì ếu ếu ện :(Nhóm 10) ử lấy địa chỉ (&).
chươn vị byte theo kích thước các bản ghi (cấu ng trình s d n đ n r i lo n ho c cho k t qu ẽ dẫn đến rối loạn hoặc cho kết quả ẫn: ếu ối tượng vào tệp nhị phân ạm Ngọc Thắng ặc, ví dụ như: ếu ảng viên hướng dẫn: sai
Khái ni m c : ệp nhị phân ờ: ch a trong m t bit, có 2 tr ng thái:ức nhất: là con trỏ kiểu char trỏ đến ột đối tượng vào tệp nhị phân ạm Ngọc Thắng
B t (on) có giá tr 1ập Lớn ị Sen
T t (off) có giá tr 0ắng ị Sen
M i stream l u gi nh ng c tr ng thái cho ta ỗi ư ữ liệu vào một tệp nhị ữ liệu vào một tệp nhị ờng ạm Ngọc Thắng
bi t thao tác nh p, xu t có thành công hay không, ếu ập Lớn ấy địa chỉ (&)
và nguyên nhân gây l i Các c này, cũng nh c ỗi ờng ư ờng
đ nh d ng, th c ch t là các ph n t c a 1 vector ị Sen ạm Ngọc Thắng ực hiện :(Nhóm 10) ấy địa chỉ (&) ầu vào như sau: ử lấy địa chỉ (&) ủa con trỏ tệp
bit ( 1 s nguyên ) ối tượng vào tệp nhị phân
Trang 16Chúng bao g m : ồm :
goodbit: b t khi không có l i x y ra và các c khác ập Lớn ỗi ảng viên hướng dẫn: ờng
đ u t t.ều lỗi ắng
eofbit: b t khi g p end-of-file.ập Lớn ặc, ví dụ như:
failbit: b t khi vi c nh p tr nên không chính xác ập Lớn ện :(Nhóm 10) ập Lớn ở một tệp dưới chế độ nhị phân, ta dùng cú
nh ng stream v n n Ví d nh thay vì nh p s ư ẫn: ổn Ví dụ như thay vì nhập số ụ ư ập Lớn ối tượng vào tệp nhị phân
nguyên thì ngường i dùng l i nh p ký t ạm Ngọc Thắng ập Lớn ực hiện :(Nhóm 10)
badbit: b t khi b ng cách nào đó stream b h ng và ập Lớn ằng read và write ị Sen ỏ tệp
m t d li u.ấy địa chỉ (&) ữ liệu vào một tệp nhị ện :(Nhóm 10)
clearbit: đ t l i các c tr ng tháiặc, ví dụ như: ạm Ngọc Thắng ờng ạm Ngọc Thắng
Trang 17 Các c trên có th đờng ể mở một tệp dưới chế độ nhị phân, ta dùng cú ượng vào tệp nhị phânc truy xu t thông qua các ấy địa chỉ (&).
hàm tươn vị byte theo kích thước các bản ghi (cấu ng ng: good(), eof(), fail(), clear() và bad()ức nhất: là con trỏ kiểu char trỏ đến
Phươn vị byte theo kích thước các bản ghi (cấu ng th c :ức nhất: là con trỏ kiểu char trỏ đến
int eof();
N u con tr t p đã cu i t p mà l i th c hi n ếu ỏ tệp ện :(Nhóm 10) ở một tệp dưới chế độ nhị phân, ta dùng cú ối tượng vào tệp nhị phân ện :(Nhóm 10) ạm Ngọc Thắng ực hiện :(Nhóm 10) ện :(Nhóm 10)
l nh đ c d li u thì phện :(Nhóm 10) ọc Thắng ữ liệu vào một tệp nhị ện :(Nhóm 10) ươn vị byte theo kích thước các bản ghi (cấu ng th c eof() tr v giá tr ức nhất: là con trỏ kiểu char trỏ đến ảng viên hướng dẫn: ều lỗi ị Senkhác không,trái l i phạm Ngọc Thắng ươn vị byte theo kích thước các bản ghi (cấu ng th c có giá tr b ng ức nhất: là con trỏ kiểu char trỏ đến ị Sen ằng read và write
không
Phươn vị byte theo kích thước các bản ghi (cấu ng th c :ức nhất: là con trỏ kiểu char trỏ đến
int fail();
Phươn vị byte theo kích thước các bản ghi (cấu ng th c fail() tr v giá tr khac không n u ức nhất: là con trỏ kiểu char trỏ đến ảng viên hướng dẫn: ều lỗi ị Sen ếu
l n nh p xu t cu i cùng có l i, trái l i phầu vào như sau: ập Lớn ấy địa chỉ (&) ối tượng vào tệp nhị phân ỗi ạm Ngọc Thắng ươn vị byte theo kích thước các bản ghi (cấu ng
th c có giá tr băng 0.ức nhất: là con trỏ kiểu char trỏ đến ị Sen
Trang 18 Phươn vị byte theo kích thước các bản ghi (cấu ng th c :ức nhất: là con trỏ kiểu char trỏ đến
Phươn vị byte theo kích thước các bản ghi (cấu ng th c good () tr v giá tr khác 0 n u m i ức nhất: là con trỏ kiểu char trỏ đến ảng viên hướng dẫn: ều lỗi ị Sen ếu ọc Thắng
vi c đ u t t đ p (không có l i nào x y ra) Khi ện :(Nhóm 10) ều lỗi ối tượng vào tệp nhị phân ẹp (không có lỗi nào xảy ra) Khi ỗi ảng viên hướng dẫn:
có m t lõi nào đó phột đối tượng vào tệp nhị phân ươn vị byte theo kích thước các bản ghi (cấu ng th c có giá tr b ng 0 ức nhất: là con trỏ kiểu char trỏ đến ị Sen ằng read và write
Phươn vị byte theo kích thước các bản ghi (cấu ng th c :ức nhất: là con trỏ kiểu char trỏ đến
void clear();
Dùng đ t t t t c các bit l i.ể mở một tệp dưới chế độ nhị phân, ta dùng cú ắng ấy địa chỉ (&) ảng viên hướng dẫn: ỗi
Trang 20Ví d 2: ụ:
Khi t o t p m i đ ghi c n ki m tra xem có t o đạm Ngọc Thắng ện :(Nhóm 10) ớn ể mở một tệp dưới chế độ nhị phân, ta dùng cú ầu vào như sau: ể mở một tệp dưới chế độ nhị phân, ta dùng cú ạm Ngọc Thắng ượng vào tệp nhị phânc
t p hay không Đ làm đi u đó ta có th dùng đo n ện :(Nhóm 10) ể mở một tệp dưới chế độ nhị phân, ta dùng cú ều lỗi ể mở một tệp dưới chế độ nhị phân, ta dùng cú ạm Ngọc Thắng
chươn vị byte theo kích thước các bản ghi (cấu ng trình sau:
Trang 21C Con tr t p ỏ tệp ệp nhị phân
1 Khái ni m ệp nhị phân
chúng ta có th truy xu t dể mở một tệp dưới chế độ nhị phân, ta dùng cú ấy địa chỉ (&) ướni các tên Các bi n này ếu
đượng vào tệp nhị phân ưc l u tr t i nh ng ch c th trong b nh Đ i ữ liệu vào một tệp nhị ạm Ngọc Thắng ữ liệu vào một tệp nhị ỗi ụ ể mở một tệp dưới chế độ nhị phân, ta dùng cú ột đối tượng vào tệp nhị phân ớn ối tượng vào tệp nhị phân
v i chớn ươn vị byte theo kích thước các bản ghi (cấu ng trình c a chúng ta, b nh máy tính ch ủa con trỏ tệp ột đối tượng vào tệp nhị phân ớn ỉ (&)
là m t dãy g m các ô nh 1 byte, m i ô có m t đ a ột đối tượng vào tệp nhị phân ồn tại ớn ỗi ột đối tượng vào tệp nhị phân ị Sen
ch xác đ nh.ỉ (&) ị Sen
V y con tr là bi n tr t i vùng nh ch a thông tin ập Lớn ỏ tệp ếu ỏ tệp ớn ớn ức nhất: là con trỏ kiểu char trỏ đến
đ xác đ nh các đ c tính c a t p, các thu c tính này ể mở một tệp dưới chế độ nhị phân, ta dùng cú ị Sen ặc, ví dụ như: ủa con trỏ tệp ện :(Nhóm 10) ột đối tượng vào tệp nhị phânbao g m: tên, tình tr ng và v trí hi n th i c a con ồn tại ạm Ngọc Thắng ị Sen ện :(Nhóm 10) ờng ủa con trỏ tệp
tr B n ch t, con tr t p xác đ nh m t t p trên đĩa ỏ tệp ảng viên hướng dẫn: ấy địa chỉ (&) ỏ tệp ện :(Nhóm 10) ị Sen ột đối tượng vào tệp nhị phân ện :(Nhóm 10)
tươn vị byte theo kích thước các bản ghi (cấu ng ng v i m t dòng d li u và liên k t 2 ức nhất: là con trỏ kiểu char trỏ đến ớn ột đối tượng vào tệp nhị phân ữ liệu vào một tệp nhị ện :(Nhóm 10) ếu
đ itối tượng vào tệp nhị phân ượng vào tệp nhị phânng này v i nhauớn