Tải bản đầy đủ (.pdf) (36 trang)

CHƯƠNG 9 TẬP TIN (FILE) doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (569.43 KB, 36 trang )

CHƯƠNG 9
CHƯƠNG

9
TẬP TIN (FILE)
TẬP

TIN

(FILE)
1. GIỚI THIỆU
y
C/C++
hổ
trợ
2
hệ
thống
nhập
xuất
:
y
C/C++
hổ
trợ
2
hệ
thống
nhập
xuất
:


− Mộthệ thống thừakế từ ngôn ngữ C







− M

th

th

n
g
nh

pxu

thư

n
g
đ

itượn
g
của C++.
2. Streams và Files

y
Hệ
thống
nhập
xuất
của
C
Hệ
thống
nhập
xuất
của
C
− Cung cấpmột giao diện(
interface
)nhất
quán
độc
lập
với
thiết
bị
thật
sự

quán
độc
lập
với
thiết

bị
thật
sự

chương trình tương tác.
cung
cấp
một
mức
độ
trừu
tượng
giữa
lập

cung
cấp
một
mức
độ
trừu
tượng
giữa
lập
trình viên và thiếtbị nhậpxuất. Sự trừu
tượng
này
được
gọi


stream

thiết
bị
tượng
này
được
gọi

stream

thiết
bị
thậtsựđượcgọilàfile.
3. Streams (dòng nhậpxuất)
y
Hệ
thống
file
của
C
được
thiết
kế
để
làm
Hệ
thống
file
của

C
được
thiết
kế
để
làm
việcvớinhiềuloạithiếtbị khác nhau như
terminals
(
thiết
bị
đầu
cuối
),
các
loại

đĩa
,
terminals
(
thiết
bị
đầu
cuối
),
các
loại

đĩa

,
băng từ,
y
Hệ
thống
file
chuyển
đổi
mỗi
loại
thành
một
y
Hệ
thống
file
chuyển
đổi
mỗi
loại
thành
một
thiếtbị logic gọilàstream. Tấtcả stream

cùng
hành
vi

cùng
hành

vi
3. Streams (dòng nhậpxuất)
y
Stream
độc
lập
với
thiết
bị
nên
cùng
một
Stream
độc
lập
với
thiết
bị
nên
cùng
một
hoạt động trên stream như ghi vào mộttập
tin
trên
đĩa
cũng

thể
dùng
để

ghi
vào
loại
tin
trên
đĩa
cũng

thể
dùng
để
ghi
vào
loại
thiếtbị khác như console (
màn hình
).
y

hai
loại
stream
:
y

hai
loại
stream
:
− Vănbản(

text
)
h

(
b
)
− N
h
ị p

n
(
b
inar
y
)
.
3.1. Text Streams
y
Một
text
stream

một
chuổi
các

tự
.

Một
text
stream

một
chuổi
các

tự
.
Trong mộttextstream,mộtsố ký tự có thể
bị
chuyển
đổi
tùy
thuộc
môi
trường
.
bị
chuyển
đổi
tùy
thuộc
môi
trường
.
y Ví dụ,kýtự newline ('\n') có thể bịđổi
thành
cặp


tự
carriage
return/linefeed
(

thành
cặp

tự
carriage
return/linefeed
(

tự xuống dòng và vềđầudòng
).
3.1. Text Streams
y
Không

quan
hệ
một
-
một
giữa
các

tự
Không


quan
hệ
một
một
giữa
các

tự
đượcviết(hayđọc) và những ký tự trên các
thiết
bị
ngoài
.
Do
đó
số

tự
được
viết
(hay
thiết
bị
ngoài
.
Do
đó
số


tự
được
viết
(hay
đọc) có thể khác số số ký tự trên thiếtbị
ngoài
.
ngoài
.
3.2. Binary Streams
y
Một
binary
stream

một
chuổi
bytes
Một
binary
stream

một
chuổi
bytes
tương ứng một-mộtvớichuổibytestrên
thiết
bị
ngoài
.

Nghĩa

không

sự
chuyển
thiết
bị
ngoài
.
Nghĩa

không

sự
chuyển
đổixảyra.Dođó, số bytes đượcviết(hay
đọc
)
thì
bằng
với
số
bytes
trên
thiết
bị
đọc
)
thì

bằng
với
số
bytes
trên
thiết
bị
ngoài.
4. FILES
y
Một
file

thể

một
tập
tin
trên
đĩa
,
một
Một
file

thể

một
tập
tin

trên
đĩa
,
một
terminal, hay máy in.
y
Để
tạo
kết
nối
(
associate
)
giữa
một
stream
y
Để
tạo
kết
nối
(
associate
)
giữa
một
stream
vớimột file ta dùng hoạt động mở (
open
).

Khi
file
được
mở
thông
tin

thể
được
trao
y
Khi
file
được
mở
,
thông
tin

thể
được
trao
đổigiữafilevàchương trình.
4. FILES
y
Không
phải
tất
cả
file

đều

cùng
khả
năng
Không
phải
tất
cả
file
đều

cùng
khả
năng
như nhau.
y

dụ
một
tập
tin
trên
đĩa
(
file
)

thể
hỗ

y

dụ
,
một
tập
tin
trên
đĩa
(
file
)

thể
hỗ
trợ truy xuấtngẫu nhiên trong khi đómáyin
(
cũng

file)
thì
không
thể
(
cũng

file)
thì
không
thể

.
y
“Tấtcả stream là như nhau nhưng file
thì
không
"
thì
không
"
.
4. FILES
y
Để
ngắt
kết
nối
giữa
một
stream
với
một
file
Để
ngắt
kết
nối
giữa
một
stream
với

một
file
ta dùng hoạt động đóng (
close
). Nếu đóng
một
file
đang
mở
cho
xuất
(
output
)
thì
nội
một
file
đang
mở
cho
xuất
(
output
)
thì
nội
dung củastreamtương ứng đượcviếtra
thiết
bị

ngoài
.
thiết
bị
ngoài
.
y Qúa trình này đượcgọi là flushing và đảm
bảo

không

thông
tin
bị
để
lại
trong
bảo

không

thông
tin
bị
để
lại
trong
vùng đệm(
buffer
).

4. FILES
y
Tất
cả
file
được
tự
động
đóng
khi
chương
Tất
cả
file
được
tự
động
đóng
khi
chương
trình mở chúng kếtthúcbìnhthường. Files
không
được
đóng
khi
chương
trình
mở
không
được

đóng
khi
chương
trình
mở
chúng bị kếtthúcbấtthường như bị treo
(
halt
)
hay
khi
chương
trình
thực
hiện
hàm
(
halt
)
hay
khi
chương
trình
thực
hiện
hàm
abort().
y
Mỗi
stream

liên
đới
với
một
file

một
cấu
y
Mỗi
stream
liên
đới
với
một
file

một
cấu
trúc kiểuFILE.
4.1. Cơ bảnvề hệ thống file
Các
hàm
liên
quan
đến
file
trong
thư
viện

stdio h
Tên hàm Chứcnăng
ê
à

Các
hàm
liên
quan
đến
file

trong
thư
viện
stdio
.
h
T
ê
nh
à
mCh

cnăn
g
fopen( ) Mở một file
fclose( ) Đóng một file.
putc(
)

Viết
một

tự
đến
một
file
putc(
)
Viết
một

tự
đến
một
file
.
fputc( ) Giống như putc() .
4.1. Cơ bảnvề hệ thống file
Tên
Chức
năng
Tên
hàm
Chức
năng
getc
(
)
Đọc

một

tự
từ
một
file
getc
(
)
Đọc
một

tự
từ
một
file
.
fgetc( ) Giống như getc() .
fgets( ) Đọcmộtchuổitừ một file.
fputs(
)
Viết
một
chuổi
đến
một
file
fputs(
)
Viết

một
chuổi
đến
một
file
.
fseek( ) Tìm mộtbytetrongmột file.
4.1. Cơ bảnvề hệ thống file
Tên Chứcnăng
hàm
ftell( ) Trả về vị trí hiệnhànhcủacủa file
idi t
i
n
di
ca
t
o
r
.
feof( )
Trả về true nếuduyệt đếncuối file (end-of-file).
f
(
)
T ả

ế

lỗi


f
error
(
)
T
r

v

true n
ế
um

t
lỗi
x

yra.
rewind( ) Đưaindicatorvềđầu.
remove( ) Xóa một file.
fflush
(
)
Xả
hết
vùng
đệm
của
file

.
fflush
(
)
Xả
hết
vùng
đệm
của
file
.
4.2. Con trỏ file (
File pointer
)
y
Con
trỏ
file

một
cấu
trúc
kiểu
FILE,
trỏ
Con
trỏ
file

một

cấu
trúc
kiểu
FILE,
trỏ
đếnthôngtinvề file như tên file, trạng thái,

vị
trí
hiện
hành
của
file
.

vị
trí
hiện
hành
của
file
.
y Con trỏ file được dùng bởistreamtương
ứng
để
thực
hiện
các
hoạt
động

nhập
xuất
ứng
để
thực
hiện
các
hoạt
động
nhập
xuất
trên file.

pháp
khai
báo
:
y

pháp
khai
báo
:
FILE *fp;
4.3. Mở file
y
Hàm
fopen
()
mở

một
stream

liên
kết
Hàm
fopen
()
mở
một
stream

liên
kết
một file vớistreamđó. Hàm trả về mộtcon
trỏ
file
trỏ
đến
tập
tin
được
mở
.
trỏ
file
trỏ
đến
tập
tin

được
mở
.
y Cú pháp:
FILE *fopen(const char *filename, const char *mode);
y filename: chứatên/đường dẫncủa file
y mode: cho biếtmở file theo mode nào.
4.3. Mở file
y
Các
mode
để
mở
tập
tin
Các
mode

để
mở
tập
tin
− "r" Nếutậptinđượcmở thành công, hàm
fopen
()
nạp

vào
bộ
nhớ


trả
về
con
fopen
()
nạp

vào
bộ
nhớ

trả
về
con
trỏ trỏđếnkýtựđầutiêncủatậptin.
Ngược
lại
hàm
fopen
()
trả
về
NULL
Ngược
lại
,
hàm
fopen
()

trả
về
NULL
− "w" Nếutậptin tồntại, nội dung củanó
sẽ
bị
ghi
đè
sẽ
bị
ghi
đè
4.3. Mở file
• "
a
"
N
ế
u
t

p
tin
đ
ượ
c
m

thành
công

hàm
a
N
ế
u
t

p
tin
đ
ượ
c
m

thành
công
hàm
fopen() nạpnóvàobộ nhớ và trả về con trỏ trỏ
đ
ế
n

t

cu

i
cùng
c


a
t

p
tin
.
N
ế
u
t

p
tin
đ
ế
n

t

cu

i
cùng
c

a
t

p
tin

.
N
ế
u
t

p
tin
không tồntại, mộttậptinmới đượctạo. Trả về
NULL
n
ế
u
không
th

m

t

p
tin
.
NULL
n
ế
u
không
th


m

t

p
tin
.
• "r+" Nếutậptinđượcmở thành công, hàm
fopen
()
n

p

vào
trong
b

nh

Tr

v

NULL
fopen
()
n

p


vào
trong
b

nh

.
Tr

v

NULL
nếu không thể mở tậptin.
4.3. Mở file
y "
a
+"
N
ế
u
t

p
tin
đ
ượ
c
m


thành
công
,
hàm
a
N
ế
u
t

p
tin
đ
ượ
c
m

thành
công
,
hàm
fopen() nạpnóvàobộ nhớ và trả về con trỏ trỏ
đ
ế
n

t

đ


u
tiên
c

a
t

p
tin
.
N
ế
u
t

p
tin
không
đ
ế
n

t

đ

u
tiên
c


a
t

p
tin
.
N
ế
u
t

p
tin
không
tồntại, mộttậptinmới đượctạo. Trả về NULL
n
ế
u
không
th

m

t

p
tin
.
n
ế

u
không
th

m

t

p
tin
.
y Các hoạt động có thể làm trên tậptin:đọc, ghi
thêm
n

i
dung
m

i
vào
cu

i
t

p
tin
Không
th


thêm
n

i
dung
m

i
vào
cu

i
t

p
tin
.
Không
th

sửa đổinội dung đang có trong tậptin.
4.3. Mở file
y

dụ
:

dụ
:

FILE *fp;
if((
fp
fopen
("
test txt" "w
")) NULL)
if((
fp
=
fopen
("
test
.
txt"
,
"w
"))
==
NULL)
{
cout << "Cannot open file";
exit(1);
exit(1);
}
4.4. Đóng file
y
Hàm
fclose
()

đóng
stream
được
mở
bởi
hàm
Hàm
fclose
()
đóng
stream
được
mở
bởi
hàm
fopen(). Khi hàm đượcgọi, nó sẽ viếtbấtkỳ
dữ
liệu
nào
vẫn
còn
trong
buffer
đến
file
rồi
dữ
liệu
nào
vẫn

còn
trong
buffer
đến
file
rồi
đóng file.
y

pháp
:
y

pháp
:
f




fil


b

i

f
()
int fclose(FILE *fp);


f
p:


con

tr

fil
e

tr

v

b

i

m
f
open
()
.

4.5. Ghi mộtkýtựđếnmột file
y

hai

hàm
xuất

tự
đến
file

putc
()


hai
hàm
xuất

tự
đến
file

putc
()

fputc(). Hai hàm này là tương đương nhau.
Hàm
putc
()
ghi
một

tự

đến
một
file
đã
Hàm
putc
()
ghi
một

tự
đến
một
file
đã
đượcmở bởihàmfopen().
y

pháp
:
y

pháp
:
f



fil



b

i

f
()
int putc(int ch, FILE *fp);

f
p

con

tr

fil
e

tr

v

b

i

m
f
open

()
− ch là ký tự đượcviết đến file.
VD: đọckýtự từ bàn phím và ghi vào file đếnkhigặpkt$
void main
()
()
{
FILE *fp; char ch;
if((fp=fopen(“test.txt”, "w"))==NULL)
{ cout << "Cannot open file.\n";
exit(1);
}
do {
ch = getchar();//đọctừ bàn phím
putc(ch, fp);//ghi vào file
}while (ch != '$');
fclose(fp);//đóng file
}
4.6. Đọcmộtkýtự từ một file
y
Hàm
để
đọc
một

tự
từ
file
:
getc()


y
Hàm
để
đọc
một

tự
từ
file
:
getc()

fgetc()
Đ
ỗi
lầ
ột

tự
từ
fil
đượ

bởi

Đ
ọcm
ỗi
lầ

nm
ột

tự
từ
fil
e
đượ
cm

bởi
hàm fopen() ở chếđộđọc(read).
ú
á
ÙC
ú
ph
á
p: int
g
etc(FILE *fp);
Ùf
p
là con trỏ file kiểuFILE.
p
− Hàm trả về mã ascii củakýtựđược đọc,
trả
về
EOF
nếu

một
lỗi
xảy
ra
.
trả
về
EOF
nếu
một
lỗi
xảy
ra
.

×