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

Bài 12 quản lý tập tin

28 174 0

Đ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

Quản lý tập tin Bài 12 Mục tiêu  Giải thích streams file  Thảo luận streams văn streams nhị phân  Giải thích 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 đối số dòng lệnh Elementary Programming with C/Session 12/ Slide of 28 Nhập/Xuất Tập Tin  Tất thao tác nhập/xuất C thực hàm thư viện chuẩn  Tiếp cận làm cho hệ thống tập tin C mạnh uyển chuyển  Nhập/xuất C theo cách: liệu truyền dạng biễu diễn nhị phân bên hay dạng văn mà người đọc Elementary Programming with C/Session 12/ Slide of 28 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ừ thiết bị đầu cuối  Mặc dù tất 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 stream  Vì streams hoạt động tương tự, nên việc quản lý thiết bị khác dễ dàng  Có hai loại streams – stream văn stream nhị phân Elementary Programming with C/Session 12/ Slide of 28 Streams Văn Bản  Một streams văn chuỗi ký tự tổ chức thành dòng kết thúc ký tự sang dòng  Trong stream văn bản, xảy vài chuyển đổi ký tự môi trường yêu cầu  Vì vậy, mối quan hệ ký tự ghi (hay đọc) ký tự thiết bị ngoại vi mối quan hệ một-một  Và chuyển đổi xảy này, số lượng ký tự ghi (hay đọc) không giống số lượng ký tự thiết bị ngoại vi Elementary Programming with C/Session 12/ Slide of 28 Streams Nhị Phân  Một streams nhị phân chuỗi byte với tương ứng một-một với thiết bị ngoại vi, nghĩa là, 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 chuỗi byte túy, mà ký hiệu 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 Tập Tin  Một tập tin tham chiếu đến thứ từ tập tin đĩ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ở 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 tập tin tự động đóng  Khi chương trình kết thúc bất thường, tập tin mở Elementary Programming with C/Session 12/ Slide of 28 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í tập tin fprintf() Hoạt động giống printf(), tập tin fscanf() Hoạt động giống scanf(), 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ừ mộtElementary vùng đệm bên vào tập tin xác địnhC/Session Programming with 12/ Slide of 28 Con Trỏ Tập Tin  Một trỏ tập tin phải cần cho việc đọc ghi tập tin  Nó 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, liệu có lỗi 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 Mở Một Tập Tin Văn Bản  Hàm fopen() mở stream để sử dụng 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 Elementary Programming with C/Session Nối tạo tập tin văn để đọc/ghi 12/ Slide 10 of 28 Nhập Xuất Chuỗi  Các hàm fputs() and fgets() ghi vào đọc chuỗi ký tự từ tập tin đĩ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 hàm 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 Mở Một Tập Tin Nhị Phân  Hàm fopen() mở stream để sử dụng 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 Elementary Programming with C/Session Nối vào tập tin nhị phân để đọc/ghi 12/ Slide 15 of 28 Đó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 Hàm fread() fwrite()  Hàm fread() fwrite() hàm đọc ghi liệu không định dạng  Chúng dùng để đọc viết vào tập tin toàn khối liệu  Hầu hết chương trình ứng dụng hữu ích đọc ghi kiểu liệu người dùng định nghĩa, đặc biệt cấu trúc  Nguyên mẫu hàm 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, Elementary Programming with C/Session size_t count, FILE *fp); 12/ Slide 17 of 28 Sử Dụng feof() Hàm feof() trả true đến cuối tập tin, không trả false (0) Hàm 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 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 Hàm ferror()  Hàm ferror() xác định liệu thao tác 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 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 Làm Sạch stream  Hàm fflush() làm vùng đệm chép có vùng đệm 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 vùng đệm xuất ghi vào tập tin  Nguyên mẫu hàm là: int fflush(FILE *fp);  Hàm fflush(), đối số, làm tất Elementary Programming with C/Session tập tin mở12/đểSlide xuất 22 of 28 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 Hành  Một trỏ trì cấu trúc FILE để lần theo vị trí nơi mà 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 curp) tăng lên  Vị trí hành trỏ tìm thấy trợ giúp hàm ftell()  Nguyên mẫu hàm là: Programming long intElementary ftell(FILE *fp);with C/Session 12/ Slide 24 of 28 Đặ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 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 Đặt Lại Vị Trí Hiện Hành -  origin định vị trí bắt đầu tìm kiếm 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 fprintf() fscanf()-1  Hệ thống nhập xuất có vùng đệm bao gồm hàm fprintf() fscanf() tương tự hàm printf() scanf() ngoại trừ chúng thao tác tập tin  Nguyên mẫu hàm 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 fprintf() fscanf() -  Mặc dù fprintf() fscanf() cách dễ luôn hiệu  Mỗi lời gọi phải thêm khoảng thời gian overhead, liệu ghi theo dạng ASCII có định dạng theo định dạng nhị phân  Vì vậy, tốc độ độ lớn tập tin vấn đề đáng ngại, fread() fwrite() lựa chọn tốt Elementary Programming with C/Session 12/ Slide 28 of 28 [...]... C/Session 12/ Slide 14 of 28 Mở Một Tập Tin Nhị Phân  Hàm fopen() mở một stream để sử dụng và liên kết một tập tin với stream đó  Hàm fopen() trả về một con trỏ tập tin kết hợp với tập tin  Nguyên mẫu của 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ở một tập tin nhị phân để đọc Tạo một tập tin nhị phân để ghi Nối vào một tập tin nhị phân... Programming with C/Session 12/ Slide 11 of 28 Ghi Một Ký Tự – Tập Tin Văn Bản  Streams có thể được ghi vào tập tin theo cách từng ký tự một hoặc theo từng chuỗi  Hàm fputc() được sử dụng để ghi các ký tự vào tập tin đã được mở trước đó bằng hàm fopen()  Nguyên mẫu của hàm này là: int fputc(int ch, FILE *fp); Elementary Programming with C/Session 12/ Slide 12 of 28 Đọc Một Ký Tự – Tập Tin Văn Bản  Hàm fgetc()... những gì có trong vùng đệm ra ngoài tùy theo kiểu tập tin  Một tập tin được mở để đọc sẽ có vùng đệm nhập liệu trống, trong khi một tập tin được mở để ghi thì vùng đệm xuất của nó sẽ được ghi vào tập tin  Nguyên mẫu của hàm là: int fflush(FILE *fp);  Hàm fflush(), không có đối số, sẽ làm sạch tất cả Elementary Programming with C/Session các tập tin đang m 12/ đểSlide xuất 22 of 28 Các Stream Chuẩn Mỗi... sau: Origin Vị trí trong tập tin SEEK_SET hay 0 SEEK_CUR hay 1 Bắt đầu tập tin Vị trí của con trỏ trong tập tin hiện hành SEEK_END hay 2 Cuối tập tin Elementary Programming with C/Session 12/ Slide 26 of 28 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ự như hàm printf() và scanf() ngoại trừ rằng chúng thao tác trên tập tin  Nguyên mẫu của các... vào một tập tin nhị phân Mở một tập tin nhị phân để đọc/ghi Tạo một tập tin nhị phân để đọc/ghi Elementary Programming with C/Session Nối vào một tập tin nhị phân để đọc/ghi 12/ Slide 15 of 28 Đóng Tập Tin Nhị Phân  Hàm fclose() đóng một stream đã được mở bằng hàm fopen()  Nguyên mẫu của hàm fclose() là: int fclose(FILE *fp); Elementary Programming with C/Session 12/ Slide 16 of 28 Hàm fread() và... nếu đã đến cuối tập tin, nếu không nó trả về false (0) Hàm này được dùng trong khi đọc dữ liệu nhị phân Nguyên mẫu là: int feof (FILE *fp); Elementary Programming with C/Session 12/ Slide 18 of 28 Hàm rewind()  Hàm rewind() đặt lại con trỏ định vị trí bên trong tập tin về đầu tập tin  Nó lấy con trỏ tập tin làm đối số  Cú pháp: rewind(fp ); Elementary Programming with C/Session 12/ Slide 19 of... trên tập tin có sinh ra lỗi hay không  Vì mỗi thao tác đặt lại tình trạng lỗi, hàm ferror() phải được gọi ngay sau mỗi thao tác; nếu không, lỗi sẽ bị mất  Nguyên mẫu của hàm là: int ferror(FILE *fp); Elementary Programming with C/Session 12/ Slide 20 of 28 Xóa Tập Tin  Hàm remove() xóa một tập tin đã cho  Nguyên mẫu của hàm là: int remove(char *filename); Elementary Programming with C/Session 12/ ... các ký tự từ một tập tin đã được mở bằng hàm fopen() ở chế độ đọc  Nguyên mẫu của hàm là: int fgetc(int ch, FILE *fp);  Hàm fgetc() trả về ký tự kế tiếp của vị trí hiện hành trong stream input, và tăng con trỏ định vị trí bên trong tập tin lên Elementary Programming with C/Session 12/ Slide 13 of 28 Nhập Xuất Chuỗi  Các hàm fputs() and fgets() ghi vào và đọc ra các chuỗi ký tự từ tập tin trên đĩa ...Đóng Một Tập Tin Văn Bản  Việc đóng một tập tin sau khi sử dụng là một điều quan trọng  Thao tác này sẽ giải phóng tài nguyên và làm giảm nguy cơ vượt quá giới hạn số tập tin có thể mở  Đóng một stream sẽ làm sạch và chép vùng đệm kết hợp của nó ra ngoài, một thao tác quan trọng để tránh... ra và viết vào tập tin toàn bộ khối dữ liệu  Hầu hết các chương trình ứng dụng hữu ích đều đọc và ghi các kiểu dữ liệu do người dùng định nghĩa, đặc biệt là các cấu trúc  Nguyên mẫu của 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, Elementary Programming with C/Session size_t count, FILE *fp); 12/ Slide 17 of ... 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 Tập Tin  Một tập tin tham chiếu đến thứ từ tập tin đĩa... cho việc đọc ghi tập tin  Nó 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, liệu có lỗi xuất hay đến cuối tập tin  Định nghĩa... bên tập tin đầu tập tin remove() Xóa tập tin fflush() Ghi liệu từ mộtElementary vùng đệm bên vào tập tin xác địnhC/Session Programming with 12/ Slide of 28 Con Trỏ Tập Tin  Một trỏ tập tin phải

Ngày đăng: 04/12/2015, 00:51

Xem thêm: Bài 12 quản lý tập tin

w