1. Trang chủ
  2. » Công Nghệ Thông Tin

PHƯƠNG PHÁP LẬP TRÌNH_9 ppt

36 171 0
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 đề Phương pháp Lập Trình_9 PPT
Trường học Trường Đại học Công Nghệ Thông Tin
Chuyên ngành Khoa học máy tính
Thể loại Báo cáo môn học
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 36
Dung lượng 569,43 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 streamvới một file ta dùng hoạt động mở open.Khi file được mở thông tin có thể được trao y Khi file được mở

Trang 1

CHƯƠNG 9

TẬP TIN (FILE)

Trang 3

2 Streams và Files

y Hệ thống nhập xuất của C

− Cung cấp một giao diện (interface) nhấtquán độc lập với thiết bị thật sự mà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ậptrình viên và thiết bị nhập xuất Sự trừu

tượng này được gọi là stream và thiết bị thật sự được gọi là file.

Trang 4

3 Streams (dòng nhập xuất)

y Hệ thống file của C được thiết kế để làmviệc với nhiều loại thiết bị 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ết bị logic gọi là stream Tất cả stream

có cùng hành vi

Trang 5

3 Streams (dòng nhập xuất)

y 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ột tậptin trên đĩa cũng có thể dùng để ghi vào loạithiết bị khác như console (màn hình)

y Có hai loại stream:

y Có hai loại stream:

− Văn bản (text)

h hâ (b )

− Nhị phân (binary)

Trang 6

3.1 Text Streams

y Một text stream là một chuổi các ký tự.

Trong một text stream, một số ký tự có thể

bị chuyển đổi tùy thuộc môi trường

y Ví dụ, ký tự newline ('\n') có thể bị đổithành cặp ký tự carriage return/linefeed (ký

thành cặp ký tự carriage return/linefeed (ký

tự xuống dòng và về đầu dòng)

Trang 7

3.1 Text Streams

y Không có quan hệ một-một giữa các ký tựđược viết (hay đọc) và những ký tự trên cácthiết bị ngoài Do đó số ký tự được viết (hayđọc) có thể khác số số ký tự trên thiết bịngoài

Trang 8

3.2 Binary Streams

y Một binary stream là một chuổi bytes

tương ứng một-một với chuổi bytes trênthiết bị ngoài Nghĩa là không có sự chuyểnđổi xảy ra Do đó, số bytes được viết (hayđọc) thì bằng với số bytes trên thiết bịngoài

Trang 9

4 FILES

y Một file có thể là một tập tin trên đĩa, mộtterminal, 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 streamvới một file ta dùng hoạt động mở (open).Khi file được mở thông tin có thể được trao

y Khi file được mở, thông tin có thể được traođổi giữa file và chương trình

Trang 10

4 FILES

y Không phải tất cả file đều có cùng khả năngnhư nhau

y Ví dụ một tập tin trên đĩa (file) có thể hỗ

y Ví dụ, một tập tin trên đĩa (file) có thể hỗtrợ truy xuất ngẫu nhiên trong khi đó máy in(cũng là file) thì không thể

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

thì không"

thì không".

Trang 11

4 FILES

y Để 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 đóngmột file đang mở cho xuất (output) thì nội

một file đang mở cho xuất (output) thì nộidung của stream tương ứng được viết rathiết bị ngoài

y Qúa trình này được gọi là flushing và đảmbảo là không có thông tin bị để lại trongvùng đệm (buffer)

Trang 12

4 FILES

y Tất cả file được tự động đóng khi chươngtrình mở chúng kết thúc bình thường Fileskhông được đóng khi chương trình mởchúng bị kết thúc bất thườ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àmabort()

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

y Mỗi stream liên đới với một file có một cấutrúc kiểu FILE

Trang 13

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

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

fputc( ) Giống như putc()

Trang 14

fgetc( ) Giống như getc()

fgets( ) Đọc một chuổi từ 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ột byte trong một file.

Trang 15

ferror( ) Trả về true nếu một lỗi xảy ra.

rewind( ) Đưa indicator về đầ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.

Trang 16

4.2 Con trỏ file (File pointer)

y Con trỏ file là một cấu trúc kiểu FILE, trỏđến thông tin về file như tên file, trạng thái,

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

y Con trỏ file được dùng bởi stream tươngứng để thực hiện các hoạt động nhập xuấttrên file

Cú pháp khai báo:

y Cú pháp khai báo:

FILE *fp;

Trang 17

4.3 Mở file

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

một file với stream đó Hàm trả về một con

trỏ file trỏ đến tập tin được mở.

y Cú pháp:

FILE *fopen(const char *filename, const char *mode);

y filename: chứa tên /đường dẫn của file

y mode: cho biết mở file theo mode nào.

Trang 18

4.3 Mở file

"r" Nếu tập tin được mở thành công, hàm

fopen() nạp nó vào bộ nhớ và trả về contrỏ trỏ đến ký tự đầu tiên của tập tin.Ngược lại hàm fopen() trả về NULL

"w" Nếu tập tin tồn tại, nội dung của nó

sẽ bị ghi đè

Trang 19

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ạp nó vào bộ nhớ và trả về con trỏ trỏđến ký tự cuối cùng của tập tin Nếu tập tinkhông tồn tại, một tập tin mới được tạo Trả vềNULL nếu không thể mở tập tin

"r+" Nếu tập tin được mở thành công, hàm

fopen() nạp nó vào trong bộ nhớ Trả về NULLnếu không thể mở tập tin

Trang 20

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àmfopen() nạp nó vào bộ nhớ và trả về con trỏ trỏđến ký tự đầu tiên của tập tin Nếu tập tin khôngtồn tại, một tập tin mới được tạo Trả về NULLnếu không thể mở tập tin

y Các hoạt động có thể làm trên tập tin: đọc, ghithêm nội dung mới vào cuối tập tin Không thểsửa đổi nội dung đang có trong tập tin

Trang 21

4.3 Mở file

y Ví dụ:

FILE *fp;

if((fp fopen("test txt" "w")) NULL)

if((fp = fopen("test.txt","w")) == NULL){

cout << "Cannot open file";

exit(1);

}

Trang 23

4.5 Ghi một ký tự đến một file

y Có hai hàm xuất ký tự đến file là putc() vàfputc() Hai hàm này là tương đương nhau.Hàm putc() ghi một ký tự đến một file đãđược mở bởi hàm fopen()

y Cú pháp:

y Cú pháp:

f là ỏ fil ả ề bởi hà f ()

int putc(int ch, FILE *fp);

− fp là con trỏ file trả về bởi hàm fopen()

− ch là ký tự được viết đến file

Trang 24

VD: đọc ký tự từ bàn phím và ghi vào file đến khi gặp kt $ void main()()

}while (ch != '$');

fclose(fp);//đóng file}

Trang 25

4.6 Đọc một ký tự từ một file

y Hàm để đọc một ký tự từ file:getc() và

y Hàm để đọc một ký tự từ file:getc() và

fgetc()

Đ ỗi lầ ột ký tự từ fil đượ ở bởi

− Đọc mỗi lần một ký tự từ file được mở bởihàm fopen() ở chế độ đọc (read)

ú á

ÙCú pháp: int getc(FILE *fp);

Ùfp là con trỏ file kiểu FILE p

− Hàm trả về mã ascii của ký tự được đọc,trả về EOF nếu một lỗi xảy ra

Trang 26

cout << "Cannot open file.\n";

Trang 27

3.8 Đọc và viết chuổi trên file

y fgets(): đọc một chuổi từ stream tương

ứng cho đến khi gặp ký tự newline hay đãđọc được length-1 ký tự

y Hàm trả về str nếu đọc thành công và mộtcon trỏ null nếu không

con trỏ null nếu không

y Cú pháp:

char *fgets(char *str, int length, FILE *fp);

Trang 28

3.8 Đọc và viết chuổi trên file

y fputs() ghi một chuổi trỏ đến bởi str đến

stream trỏ đến bởi con trỏ file fp Hàm trả

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

y Cú pháp:

int fputs(const char *str, FILE *fp);

Trang 30

4.9 Hàm fread() và fwrite()

y Hàm fread() và fwrite() : đọc và ghi mộtkhối của bất kỳ dữ liệu nào có kích thướclớn hơn 1 byte

y Cú pháp:

size_t fread(void *buffer, size_t numbytes, size_t count, FILE *fp);

size t fwrite(const void *buffer size t numbytes size t count FILE *fp);

Trang 31

4.10 Hàm rewind()

y Hàm rewind() di chuyển indicator đến điểmbắt đầu của file

y Hàm có prototype như sau:

y Hàm có prototype như sau:

void rewind(FILE *fp);

Trang 32

4.11 Hàm ferror()

y Hàm ferror() cho biết một hoạt động trên

file đã gây ra lỗi

Trang 33

4.12 Xóa file

y Hàm remove() dùng để xóa tập tin

y Cú pháp:

int remove(const char *filename);

y Hàm trả về zero nếu xóa thành công, ngược

l ả ề

lại trả về nonzero

Trang 34

y Hàm ghi nội dung còn trong buffer đến file

fp Nếu gọi hàm fflush() không có đối số thìtất cả file đang mở

y Hàm trả về 0 nếu thành công, ngược lại trả

về EOF

Trang 35

5 Truy xuất file ngẫu nhiên

y Để đọc hay viết từ hay đến một vị trí bất kỳtrong file ta cần sự giúp đỡ của hàm

fseek() Hàm này dùng để di chuyển chỉ báofile

y Cú pháp:

y Cú pháp:

int fseek(FILE *fp long numbytes int origin);

Trang 36

6 Các stream chuẩn

y Khi một chương trình thực thi, ba stream được

mở tự động Đó là stdin (standard input), stdout(standard output), và stderr (standard error) stdindùng để đọc từ bàn phím, stdout và stderr dùng

để viết đến màn hình

y Bởi vì standard streams là các con trỏ file nên cóthể dùng các hàm nhập xuất trên chúng

thể dùng các hàm nhập xuất trên chúng

Ngày đăng: 27/06/2014, 11:20

w