Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
569,43 KB
Nội dung
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ự mà quá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ập trình viên và thiếtbị nhậpxuất. Sự trừu tượng này được gọi là stream và thiết bị tượng này được gọi là stream và 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ó cùng hành vi có 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 có thể dùng để ghi vào loại tin trên đĩa cũng có thể dùng để ghi vào loại thiếtbị khác như console ( màn hình ). y Có hai loại stream : y Có hai loại stream : − Vănbản( text ) h hâ ( b ) − N h ị p hâ n ( b inar y ) . 3.1. Text Streams y Một text stream là một chuổi các ký tự . Một text stream là một chuổi các ký 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 ký tự carriage return/linefeed ( ký thành cặp ký tự carriage return/linefeed ( ký tự xuống dòng và vềđầudòng ). 3.1. Text Streams y Không có quan hệ một - một giữa các ký tự Không có quan hệ một một giữa các ký tự đượcviết(hayđọc) và những ký tự trên các thiết bị ngoài . Do đó số ký tự được viết (hay thiết bị ngoài . Do đó số ký 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 là một chuổi bytes Một binary stream là một chuổi bytes tương ứng một-mộtvớichuổibytestrên thiết bị ngoài . Nghĩa là không có sự chuyển thiết bị ngoài . Nghĩa là không có 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 có thể là một tập tin trên đĩa , một Một file có thể là 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 có thể được trao y Khi file được mở , thông tin có thể được trao đổigiữafilevàchương trình. 4. FILES y Không phải tất cả file đều có cùng khả năng Không phải tất cả file đều có cùng khả năng như 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ấtngẫu nhiên trong khi đómáyin ( cũng là file) thì không thể ( cũng là file) thì không thể . y “Tấtcả stream là như nhau nhưng file thì không " thì không " . [...]... thái, và vị trí hiện hành của file Con trỏ file được dùng bởi stream tương ứng để thực hiện các hoạt động nhập xuất trên file Cú pháp khai báo: FILE *fp; 4.3 Mở file 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ở Cú pháp: FILE *fopen(const char *filename, const char *mode); filename: chứa tên /đường dẫn của file mode: cho biết mở file theo... kỳ dữ liệu nào vẫn còn trong buffer đến file rồi đóng file Cú pháp: int fclose(FILE *fp); − fp: là con trỏ file trả về bởi hàm fopen() f ỏ fil ả ề hà f () 4.5 Ghi một ký tự đến một file 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() Cú pháp: int putc(int ch, FILE *fp); − fp là con trỏ file trả về bởi... được length-1 ký tự length 1 Hàm trả về str nếu đọc thành công và một con trỏ null nếu không không Cú pháp: char *fgets(char *str, int length, FILE *fp); 3.8 Đọc và viết chuổi trên file 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 Cú pháp: int fputs(const char *str, FILE *fp); void main(void) { char str[80]; FILE *fp; h t [80] *f if((fp... rewind(FILE *fp); 4.11 Hàm ferror() Hàm ferror() cho biết một hoạt động trên file đã gây ra lỗi Cú pháp: int ferror(FILE *fp); Hàm trả về true nếu một lỗ đã xảy ra với à ả ề ế ộ lỗi ả ớ hoạt động trên file trước khi gọi hàm ferror(), ngược l trả về f l f () lại ả ề false 4.12 Xóa file Hàm remove() dùng để xóa tập tin Cú pháp: int remove(const char *filename); Hàm trả về zero nếu xóa thành công, ngược lại ả ề... của stream Cú pháp: int fflush(FILE *fp); fp); Hàm ghi nội dung còn trong buffer đến file fp fp Nếu gọi hàm fflush() không có đối số thì tất cả file đang mở Hàm trả về 0 nếu thành công, ngược l trả à ả ề ế hà h ô lại ả về EOF 5 Truy xuất file ngẫu nhiên Để đọ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áo file Cú pháp: int fseek(FILE... fclose(fp);//đóng file } 4.6 Đọc một ký tự từ một file Hàm để đọc một ký tự từ file:getc() và fgetc() − Đ mỗi lầ một ký tự từ fil đượ mở bởi Đọc ỗi lần ột file được ở hà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 void main() { FILE *f char ch; *fp; h h if((fp=fopen(”test.txt”, "r"))==NULL)... add a newline */ fputs(str, fp); } while(*str!='\n'); while( str! \n ); } 4.9 Hàm fread() và fwrite() Hàm fread() và fwrite() : đọc và ghi một khối của bất kỳ dữ liệu nào có kích thước lớn hơn 1 byte Cú pháp: size_t fread(void *buffer, size_t numbytes, size_t count, FILE *fp); size_t size t fwrite(const void *buffer size t numbytes size t count FILE *fp); buffer, size_t numbytes, size_t count,FILE fp); . diện( interface )nhất quán độc lập với thiết bị thật sự mà quá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ập trình viên. 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 có một cấu y Mỗi stream liên đới với một file có một cấu trúc. stream có cùng hành vi có 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 có thể dùng để ghi vào loại tin trên đĩa cũng có thể dùng để ghi vào loại thiếtbị