QUAN LY TAP TIN NGON NGU LAP TRINH C

28 2 0
QUAN LY TAP TIN NGON NGU LAP TRINH C

Đ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

Tập Tin  Một tập tin có thể tham chiếu đến bất cứ thứ gì từ một tập tin trên đĩa đến một thiết bị đầu cuối hay một máy in  Một tập tin kết hợp với một stream bằng cách thực hiện thao t[r]

(1)Quản lý tập tin Bài 12 (2) Mục tiêu  Giải thích streams và file  Thảo luận các streams văn và streams nhị phân  Giải thích các hàm xử lý tập tin  Giải thích trỏ tập tin  Thảo luận trỏ hành  Giải thích các đối số dòng lệnh Elementary Programming with C/Session 12/ Slide of 28 (3) Nhập/Xuất Tập Tin  Tất các thao tác nhập/xuất C thực các hàm thư viện chuẩn  Tiếp cận này làm cho hệ thống tập tin C mạnh và uyển chuyển  Nhập/xuất C có thể theo cách: liệu có thể truyền dạng biễu diễn nhị phân bên nó hay dạng văn mà người có thể đọc Elementary Programming with C/Session 12/ Slide of 28 (4) Streams  Hệ thống tập tin C làm việc với nhiều thiết bị khác bao gồm máy in, ổ đĩa, ổ băng từ và các thiết bị đầu cuối  Mặc dù tất các thiết bị khác nhau, hệ thống tập tin có vùng đệm chuyển thiết bị thiết bị logic gọi là stream  Vì streams hoạt động tương tự, nên việc quản lý các thiết bị khác dễ dàng  Có hai loại streams – stream văn và stream nhị phân Elementary Programming with C/Session 12/ Slide of 28 (5) Streams Văn Bản  Một streams văn là chuỗi các ký tự có thể tổ chức thành các dòng kết thúc ký tự sang dòng  Trong stream văn bản, có thể xảy vài chuyển đổi ký tự môi trường yêu cầu  Vì vậy, mối quan hệ các ký tự ghi (hay đọc) và ký tự thiết bị ngoại vi có thể không phải là mối quan hệ một-một  Và vì chuyển đổi có thể xảy này, số lượng ký tự ghi (hay đọc) có thể không giống số lượng ký tự thiết bị ngoại vi Elementary Programming with C/Session 12/ Slide of 28 (6) Streams Nhị Phân  Một streams nhị phân là chuỗi các byte với tương ứng một-một với thiết bị ngoại vi, nghĩa là, không có chuyển đổi ký tự  Số lượng byte đọc (hay ghi) giống số lượng byte thiết bị ngoại vi  Các stream nhị phân là các chuỗi byte túy, mà không có ký hiệu nào dùng để điểm kết thúc tập tin hay kết thúc mẫu tin  Kết thúc tập tin xác định kích thước tập tin Elementary Programming with C/Session 12/ Slide of 28 (7) Tập Tin  Một tập tin có thể tham chiếu đến thứ gì từ tập tin trên đĩa đến thiết bị đầu cuối hay máy in  Một tập tin kết hợp với stream cách thực thao tác mở và ngưng kết hợp thao tác đóng  Khi chương trình kết thúc bình thường, tất các tập tin tự động đóng  Khi chương trình kết thúc bất thường, các tập tin còn mở Elementary Programming with C/Session 12/ Slide of 28 (8) Tên Chức fopen() Mở tập tin fclose() Đóng tập tin fputc() Ghi ký tự vào tập tin fgetc() Đọc ký tự từ tập tin fread() Đọc từ tập tin vào vùng đệm fwrite() Ghi từ vùng đệm vào tập tin fseek() tìm vị trí nào đó tập tin fprintf() Hoạt động giống printf(), trên tập tin fscanf() Hoạt động giống scanf(), trên tập tin feof() Trả true đã đến cuối tập tin ferror() Trả true xảy lỗi rewind() Đặt lại trỏ định vị trí bên tập tin đầu tập tin remove() Xóa tập tin fflush() Ghi liệu từ vùng đệm bên vào tập tin xác định Elementary Programming with C/Session 12/ Slide of 28 (9) Con Trỏ Tập Tin  Một trỏ tập tin phải cần cho việc đọc và ghi các tập tin  Nó là trỏ đến cấu trúc chứa thông tin tập tin Thông tin bao gồm tên tập tin, vị trí tập tin, liệu tập tin có đọc hay ghi, và liệu có lỗi nào xuất hay đã đến cuối tập tin  Định nghĩa lấy từ studio.h bao gồm khai báo cấu trúc tên FILE  Câu lệnh khai báo cần thiết cho trỏ tập tin là: FILE *fp Elementary Programming with C/Session 12/ Slide of 28 (10) Mở Một Tập Tin Văn Bản  Hàm fopen() mở stream để sử dụng và liên kết tập tin với stream đó  Hàm fopen() trả trỏ kết hợp với tập tin  Nguyên mẫu hàm fopen() là: FILE *fopen(const char *filename, const char *mode); Chế độ R w a r+ w+ a+f Ý nghĩa Mở tập tin văn để đọc Tạo tập tin văn để ghi Nối vào tập tin văn Mở tập tin văn để đọc/ghi Tạo tập tin văn để đọc/ghi Nối tạo tập tin văn để đọc/ghi Elementary Programming with C/Session 12/ Slide 10 of 28 (11) Đóng Một Tập Tin Văn Bản  Việc đóng tập tin sau sử dụng là điều quan trọng  Thao tác này giải phóng tài nguyên và làm giảm nguy vượt quá giới hạn số tập tin có thể mở  Đóng stream làm và chép vùng đệm kết hợp nó ngoài, thao tác quan trọng để tránh liệu ghi đĩa  Hàm fclose() đóng stream đã mở hàm fopen()  Nguyên mẫu hàm fclose() là : int fclose(FILE *fp);  Hàm fcloseall() đóng tất các streams mở Elementary Programming with C/Session 12/ Slide 11 of 28 (12) Ghi Một Ký Tự – Tập Tin Văn Bản  Streams có thể ghi vào tập tin theo cách ký tự theo chuỗi  Hàm fputc() sử dụng để ghi các ký tự vào tập tin đã mở trước đó hàm fopen()  Nguyên mẫu hàm này là: int fputc(int ch, FILE *fp); Elementary Programming with C/Session 12/ Slide 12 of 28 (13) Đọc Một Ký Tự – Tập Tin Văn Bản  Hàm fgetc() dùng để đọc các ký tự từ tập tin đã mở hàm fopen() chế độ đọc  Nguyên mẫu hàm là: int fgetc(int ch, FILE *fp);  Hàm fgetc() trả ký tự vị trí hành stream input, và tăng trỏ định vị trí bên tập tin lên Elementary Programming with C/Session 12/ Slide 13 of 28 (14) Nhập Xuất Chuỗi  Các hàm fputs() and fgets() ghi vào và đọc các chuỗi ký tự từ tập tin trên đĩa  Hàm fputs() viết toàn chuỗi vào stream đã định  Hàm fgets() đọc chuỗi từ stream đã cho đọc ký tự sang dòng sau đã đọc length-1 ký tự  Nguyên mẫu các hàm này là: int fputs(const char *str, FILE *fp); char *fgets( char *str, int length, FILE *fp); Elementary Programming with C/Session 12/ Slide 14 of 28 (15) Mở Một Tập Tin Nhị Phân  Hàm fopen() mở stream để sử dụng và liên kết tập tin với stream đó  Hàm fopen() trả trỏ tập tin kết hợp với tập tin  Nguyên mẫu hàm fopen() là: FILE *fopen(const char *filename,const char *mode); Chế độ rb wb ab r+b w+b a+b Ý nghĩa Mở tập tin nhị phân để đọc Tạo tập tin nhị phân để ghi Nối vào tập tin nhị phân Mở tập tin nhị phân để đọc/ghi Tạo tập tin nhị phân để đọc/ghi Nối vào tập tin nhị phân để đọc/ghi Elementary Programming with C/Session 12/ Slide 15 of 28 (16) Đóng Tập Tin Nhị Phân  Hàm fclose() đóng stream đã mở hàm fopen()  Nguyên mẫu hàm fclose() là: int fclose(FILE *fp); Elementary Programming with C/Session 12/ Slide 16 of 28 (17) Hàm fread() và fwrite()  Hàm fread() và fwrite() là các hàm đọc ghi liệu không định dạng  Chúng dùng để đọc và viết vào tập tin toàn khối liệu  Hầu hết các chương trình ứng dụng hữu ích đọc và ghi các kiểu liệu người dùng định nghĩa, đặc biệt là các cấu trúc  Nguyên mẫu các hàm này là: size_t fread(void *buffer, size_t num_bytes, size_t count, FILE *fp); size_t fwrite(const void *buffer, size_t num_bytes, size_t count, FILE *fp); Elementary Programming with C/Session 12/ Slide 17 of 28 (18) Sử Dụng feof() Hàm feof() trả true đã đến cuối tập tin, không nó trả false (0) Hàm này dùng đọc liệu nhị phân Nguyên mẫu là: int feof (FILE *fp); Elementary Programming with C/Session 12/ Slide 18 of 28 (19) Hàm rewind()  Hàm rewind() đặt lại trỏ định vị trí bên tập tin đầu tập tin  Nó lấy trỏ tập tin làm đối số  Cú pháp: rewind(fp ); Elementary Programming with C/Session 12/ Slide 19 of 28 (20) Hàm ferror()  Hàm ferror() xác định liệu thao tác trên tập tin có sinh lỗi hay không  Vì thao tác đặt lại tình trạng lỗi, hàm ferror() phải gọi sau thao tác; không, lỗi bị  Nguyên mẫu hàm là: int ferror(FILE *fp); Elementary Programming with C/Session 12/ Slide 20 of 28 (21) Xóa Tập Tin  Hàm remove() xóa tập tin đã cho  Nguyên mẫu hàm là: int remove(char *filename); Elementary Programming with C/Session 12/ Slide 21 of 28 (22) Làm Sạch các stream  Hàm fflush() làm vùng đệm và chép gì có vùng đệm ngoài tùy theo kiểu tập tin  Một tập tin mở để đọc có vùng đệm nhập liệu trống, tập tin mở để ghi thì vùng đệm xuất nó ghi vào tập tin  Nguyên mẫu hàm là: int fflush(FILE *fp);  Hàm fflush(), không có đối số, làm tất các tập tin mở để xuất Elementary Programming with C/Session 12/ Slide 22 of 28 (23) Các Stream Chuẩn Mỗi chương trình C bắt đầu thực thi DOS, hệ điều hành tự động mở stream đặc biệt: • Nhập chuẩn (stdin) • Xuất chuẩn (stdout) • Lỗi chuẩn (stderr) • Máy in chuẩn (stdprn) • Thiết bị phụ trợ chuẩn (stdaux) Elementary Programming with C/Session 12/ Slide 23 of 28 (24) Hành  Một trỏ trì cấu trúc FILE để lần theo vị trí nơi mà các thao tác nhập/xuất diễn  Mỗi ký tự đọc từ hay ghi vào stream, trỏ kích hoạt hành (gọi là curp) tăng lên  Vị trí hành trỏ này có thể tìm thấy trợ giúp hàm ftell()  Nguyên mẫu hàm là: long int ftell(FILE *fp); Elementary Programming with C/Session 12/ Slide 24 of 28 (25) Đặt Lại Vị Trí Hiện Hành - Hàm fseek() định lại vị trí curp dời số byte tính từ đầu, từ vị trí hành hay từ cuối stream là tùy vào vị trí qui định gọi hàm fseek() Nguyên mẫu hàm là: int fseek (FILE *fp, long int offset, int origin); Elementary Programming with C/Session 12/ Slide 25 of 28 (26) Đặt Lại Vị Trí Hiện Hành -  origin định vị trí bắt đầu tìm kiếm và phải có giá trị sau: Origin Vị trí tập tin SEEK_SET hay SEEK_CUR hay Bắt đầu tập tin Vị trí trỏ tập tin hành SEEK_END hay Cuối tập tin Elementary Programming with C/Session 12/ Slide 26 of 28 (27) fprintf() và fscanf()-1 Hệ thống nhập xuất có vùng đệm bao gồm các hàm fprintf() và fscanf() tương tự hàm printf() và scanf() ngoại trừ chúng thao tác trên tập tin Nguyên mẫu các hàm này là: int fprintf(FILE * fp, const char *control_string, ); int fscanf(FILE *fp, const char *control_string, ); Elementary Programming with C/Session 12/ Slide 27 of 28 (28) fprintf() và fscanf() -  Mặc dù fprintf() và fscanf() là cách dễ không phải luôn luôn là hiệu  Mỗi lời gọi phải thêm khoảng thời gian overhead, vì liệu ghi theo dạng ASCII có định dạng không phải theo định dạng nhị phân  Vì vậy, tốc độ và độ lớn tập tin là vấn đề đáng ngại, thì fread() và fwrite() là lựa chọn tốt Elementary Programming with C/Session 12/ Slide 28 of 28 (29)

Ngày đăng: 06/09/2021, 17:36

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan