1. Trang chủ
  2. » Giáo án - Bài giảng

Phan3 laptrinhc chuong8 file

71 11 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

Chương Tệp (FILE) Ngo Van Linh Bộ môn Các hệ thống thông tin Viện Công nghệ thông tin Truyền thông Đại học Bách Khoa Hà Nội Nội dung          8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 vị Giới thiệu Kiểu xuất nhập nhị phân văn Các hàm thao tác cấp Đóng/mở tệp, xóa vùng đệm, kiểm tra lỗi Nhập xuất ký tự Các hàm nhập xuất theo kiểu văn Tệp văn thiết bị chuẩn Các hàm nhập xuất theo kiểu nhị phân Nhập xuất ngẫu nhiên, di chuyển trỏ 8.1 Giới thiệu     Một tệp tin đơn giản dãy byte (mỗi byte có giá trị từ đến 255) ghi đĩa Số byte dãy độ dài tệp Chương trình bày thao tác tệp tạo tệp mới, ghi liệu từ nhớ lên tệp, đọc liệu từ tệp vào nhớ, Trong C, thao tác tệp thực nhờ hàm thư viện Các hàm chia thành nhóm: cấp cấp Mỗi hàm (cấp hay cấp 2) truy xuất theo hai kiểu nhị phân văn 8.1 Giới thiệu  Các hàm cấp 1:    thực việc đọc/ghi DOS Khơng có dịch vụ xuất nhập riêng cho kiểu liệu mà có dịch vụ đọc/ghi dãy byte Ví dụ: để ghi số thực lên đĩa, ta dùng dịch vụ ghi byte; để ghi 10 số nguyên lên đĩa, ta dùng dịch vụ ghi 20 byte Mỗi tệp có số hiệu (handle) Các hàm cấp làm việc với tệp thông qua số hiệu tệp 8.1 Giới thiệu  Các hàm cấp 2:     xây dựng từ hàm cấp nên dễ sử dụng có nhiều khả có dịch vụ truy xuất cho kiểu liệu Ví dụ: hàm xuất nhập ký tự, chuỗi, số nguyên, số thực, cấu trúc, C tự động cung cấp vùng đệm Mỗi lần đọc/ghi thường tiến hành vùng đệm không hẳn tệp Khi ghi liệu liệu đưa vào vùng đệm, vùng đệm đầy liệu vùng đệm đẩy lên đĩa Khi đọc, thông tin lấy từ vùng đệm, vùng đệm trống máy lấy liệu từ đĩa đưa vào vùng đệm  giảm só lần nhập xuất đĩa, nâng cao tốc độ làm việc làm việc với tệp thông qua biến trỏ tệp 8.2 Kiểu nhập xuất nhị phân văn  8.2.1 Kiểu nhị phân   Bảo toàn liệu: q trình xuất nhập, liệu khơng bị biến đổi Mã kết thúc tệp: đọc, gặp cuối tệp ta nhận mã kết thúc tệp EOF (giá trị -1) hàm feof cho giá trị khác Tại lại chọn giá trị -1? Lý đơn giản: chưa gặp cuối tệp đọc byte có giá trị từ đến 255 Giá trị -1 không trùng với byte 8.2 Kiểu nhập xuất nhị phân văn  8.2.2 Kiểu văn bản:   khác kiểu nhị phân xử lý ký tự chuyển dòng (mã 10) ký tự mã 26 Mã chuyển dòng:     ghi, ký tự LF (mã 10) chuyển thành ký tự CR (mã 13) LF đọc, ký tự liên tiếp CR LF tệp cho ta ký tự LF Ví dụ: xét hàm fputc(10,fp);nếu tệp fp mở theo kiểu nhị phân hàm ghi lên tệp ký tự mã 10; fp mở theo kiểu văn hàm ghi lên tệp hai mã 13 10 Mã kết thúc tệp: đọc, gặp ký tự có mã 26 cuối tệp ta nhận mã kết thúc tệp EOF (số -1) hàm feof(fp) cho giá trị khác 8.2.3 Ví dụ minh họa  Chương trình sau tạo tệp có tên vb np Trong chương trình dùng hàm:    fopen để mở tệp fputc để ghi ký tự lên tệp fclose để đóng tệp 8.2.3 Ví dụ minh họa (tiếp) #include void main(){ FILE *fvb, *fnp; //Khai báo biến trỏ tệp fvb = fopen("vb","wt"); //Mở tệp vb để ghi theo kiểu văn fnp = fopen("np","wb"); //Mở tệp np để ghi theo kiểu nhị phân // Ghi ký tự lên tệp fvb fputc('A',fvb); fputc(26,fvb); fputc(10,fvb); fputc('B',fvb); // Ghi ký tự lên tệp fnp fputc('A',fnp); fputc(26,fnp); fputc(10,fnp); fputc('B',fnp); fclose(fvb); fclose(fnp); } 8.2.3 Ví dụ minh họa (tiếp)  Kết quả:    Tệp vb có ký tự ứng với mã: 65 26 13 10 66 Tệp np có ký tự ứng với mã: 65 26 10 66 Chú ý:   dùng kiểu văn để đọc tệp vb hay tệp np ta nhận ký tự đầu (mã 65) gặp ký tự thứ hai (mã 26) ta nhận mã kết thúc tệp muốn đọc tất ký tự tệp, ta cần dùng hàm fgetc theo kiểu nhị phân 10 8.8.4 Hàm fread: đọc mẫu tin từ tệp tin  Dạng hàm:   Đối:      int fread(void *ptr, int size, int n, FILE *f); ptr trỏ trỏ tới vùng nhớ chứa liệu đọc từ tệp tin size kích thước mẫu tin theo byte n số mẫu tin cần đọc f trỏ tệp Công dụng: đọc n mẫu tin kích thước size byte từ tệp f chứa vào vùng nhớ ptr Hàm trả giá trị số mẫu tin thực đọc 57 Ví dụ fwrite, fread Ví dụ 1: chép tệp dùng fwrite, fread #include #include void main(){ int n; char t1[20], t2[20], c[1000]; FILE *f1, *f2; printf("\nTEP NGUON: ");gets(t1); printf("\nTEP DICH");gets(t2); f1=fopen(t1,"rb"); if(f1==NULL){ printf("\nTEP %s khong ton tai",t1); getch(); exit(1); } f2=fopen(t2,"wb"); while((n=fread(c,1,1000,f1))>0) fwrite(c,1,n,f2); fclose(f1); fclose(f2); }  58 Ví dụ fwrite, fread Ví dụ 2: ghi đọc dãy n phần tử số thực #include #include void main(){ FILE *f; float a[20],b[20]; int i,n; // Nhập số phần tử n do{ printf("Nhap so phan tu n= ");scanf("%d",&n); }while((n20)); // Nhập vào n phần tử thực for(i=0;i

Ngày đăng: 30/05/2021, 11:21

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

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

TÀI LIỆU LIÊN QUAN

w