Tài liệu Bài giảng Lập trình với tập tin: Lập trình với tập tin
Nguyễn Đông Hà
Khoa CNTT – ĐH KHTN
Sưu tầm bởi: www.daihoc.com.vn 
Lập trình với tập tin
 Dữ liệu của chương trình được lưu trữ trong bộ
nhớ chính (các biến bộ nhớ), không được lưu 
trữ cho lần chạy kế tiếp của chương trình
 Mục đích chính của việc lập trình với tập tin là
nhằm để lưu trữ dữ liệu vào bộ nhớ phụ và
truy xuất trở lại khi cần thiết
Sưu tầm bởi: www.daihoc.com.vn 
Phân loại tập tin
 Tập tin văn bản
 có thể xem nội dung bằng lệnh type của hệ điều 
hành DOS
 được soạn thảo bằng các chương trình soạn thảo 
văn bản đơn giản như Notepad của Windows...
 Tập tin nhị phân 
 không có dạng văn bản ASCII
 ví dụ: tập tin mã thực thi trên hệ điều hành 
(.exe,.com), tập tin văn bản phức hợp (.doc), tập 
tin hình ảnh (.jpg)
Sưu tầm bởi: www.daihoc.com.vn 
Kỹ thuật lập trình tập tin
 Các thao tác với tập tin luôn gồm 3 bước 
chính sau đây:
Mở tập tin để chuẩn bị làm việc
Đọc và ghi dữ liệu
Đóng tập tin 
Sưu tầm bởi: www.daiho...
                
              
                                            
                                
            
 
            
                 37 trang
37 trang | 
Chia sẻ: honghanh66 | Lượt xem: 1230 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Lập trình với tập tin, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Lập trình với tập tin
Nguyễn Đông Hà
Khoa CNTT – ĐH KHTN
Sưu tầm bởi: www.daihoc.com.vn 
Lập trình với tập tin
 Dữ liệu của chương trình được lưu trữ trong bộ
nhớ chính (các biến bộ nhớ), không được lưu 
trữ cho lần chạy kế tiếp của chương trình
 Mục đích chính của việc lập trình với tập tin là
nhằm để lưu trữ dữ liệu vào bộ nhớ phụ và
truy xuất trở lại khi cần thiết
Sưu tầm bởi: www.daihoc.com.vn 
Phân loại tập tin
 Tập tin văn bản
 có thể xem nội dung bằng lệnh type của hệ điều 
hành DOS
 được soạn thảo bằng các chương trình soạn thảo 
văn bản đơn giản như Notepad của Windows...
 Tập tin nhị phân 
 không có dạng văn bản ASCII
 ví dụ: tập tin mã thực thi trên hệ điều hành 
(.exe,.com), tập tin văn bản phức hợp (.doc), tập 
tin hình ảnh (.jpg)
Sưu tầm bởi: www.daihoc.com.vn 
Kỹ thuật lập trình tập tin
 Các thao tác với tập tin luôn gồm 3 bước 
chính sau đây:
Mở tập tin để chuẩn bị làm việc
Đọc và ghi dữ liệu
Đóng tập tin 
Sưu tầm bởi: www.daihoc.com.vn 
Mở tập tin
 Dùng hàm fopen để mở tập tin theo cú pháp sau: 
FILE *fopen(const char *ten_tap_tin, 
const char *tuy_chon);
 Ví dụ:
/* Mo tap tin ten la text.txt de ghi */
fopen( “text.txt” , ”wt” );
Sưu tầm bởi: www.daihoc.com.vn 
Mở tập tin
 Các tùy chọn có thể có: 
mở file để đọc và thêm vào phía sau file cũa+
mở file để đọc viết, xóa hoàn toàn phần dữ liệu cũw+
mở file để đọc viết, ghi đè lên phần dữ liệu đã cór+
mở file để thêm vào phía sau file đã tồn tạia
mở file để ghi, nếu file ko tồn tại, tạo file mới, nếu 
đã tồn tại, ghi đè lên file cũ ko cần hỏi
w
mở file để đọc, nếu file ko tồn tại, fopen trả về
NULL
r
Sưu tầm bởi: www.daihoc.com.vn 
Mở tập tin
 Mặc định mở tập tin là tập tin văn bản, để mở
tập tin nhị phân, phần tùy chọn phải thêm vào 
ký tự “b”, tức là “wb”, “rb”.. (b: binary)
 Có thể thêm ký tự “t” vào phần tùy chọn cho 
tập tin văn bản, mặc dù không ghi cũng được. 
(t: text)
Sưu tầm bởi: www.daihoc.com.vn 
Mở tập tin 
 Hàm fopen() trả về NULL nếu xảy ra lỗi:
 Sử dụng tên tập tin không đúng quy tắc
 Mở tập tin chưa sẵn sàng (đĩa chưa format, chưa 
đóng ổ đĩa)
 Mở tập tin không tồn tại
 Bất cứ khi nào sử dụng hàm fopen, luôn phải 
kiểm tra kết quả trả về xem có thực hiện thành 
công hay không
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm đọc, ghi 
 Đọc các giá trị số (số nguyên, thực, 1 ký tự..)
int fscanf(FILE *tap_tin, 
const char * format [ , argument , ...] ); 
 Ví dụ
/* doc mot so nguyen dua vao bien n tu
tap tin duoc dai dien boi con tro ten la
fp */
fscanf(fp ,”%d” , &n);
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm đọc, ghi 
 Ví dụ
/* Doc mot chuoi ky tu chua toi da
20 ky tu tu tap tin duoc dai dien boi
con tro fp, dua vao bien chuoi ky tu ten
la dong */
fgets(dong,20,fp);
char * fgets (char * chuoi, int sokytu , 
FILE * tap_tin); 
 Đọc các giá trị chuỗi ký tự
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm đọc, ghi 
 Ghi
int fprintf (FILE * tap_tin, 
const char * ma[ , bien , ...] );
 Ví dụ
/* ghi mot so nguyen n ten tap tin duoc 
dai dien boi con tro ten la fp */
fprintf(fp,"%d",n);
Sưu tầm bởi: www.daihoc.com.vn 
Tạo tập tin văn bản mới
 Gồm 3 bước:
 Mở tập tin bằng hàm fopen() với tùy chọn “wt”
 Ghi dữ liệu lên tập tin bằng hàm fprintf()
 Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn 
Tạo tập tin văn bản mới – ví dụ
void TaoTapTin()
{
FILE* fp;
int x = 10;
fp = fopen(“test.txt”,”wt”);
if(fp != NULL)
{
fprintf(fp, “Chao cac ban !\n”);
fprintf(fp,"x = %d", x);
fclose(fp);
}
else
printf(“Khong the tao tap tin”);
}
Sưu tầm bởi: www.daihoc.com.vn 
Đọc dữ liệu từ tập tin văn bản có sẵn
 Gồm 3 bước:
 Mở tập tin bằng hàm fopen() với tùy chọn “rt”
 Gọi hàm fscanf() hay fgets() để đọc dữ liệu từ tập 
tin vào biến bộ nhớ
 Đóng tập tin bằng hàm fclose()
 Dùng hàm fscanf để đọc số nguyên, số thực 
hay ký tự; dùng hàm fgets để đọc nguyên một 
dòng của tập tin
 Để kiểm tra đã đến cuối tập tin hay chưa, dùng 
hàm feof
Sưu tầm bởi: www.daihoc.com.vn 
Đọc dữ liệu từ tập tin văn bản – ví dụ
Sưu tầm bởi: www.daihoc.com.vn 
#define MAXCHAR 255
void DocTapTin()
{
FILE* fp;
char dong[MAXCHAR+1];
fp = fopen(“test.txt”,”rt”);
if(fp != NULL)
{
while(!feof(fp)) /* chua cuoi tt*/
{
if(fgets(dong,MAXCHAR,fp)!=NULL)
printf(“%s”,dong);
}
fclose(fp);
}
else
printf(“Khong the mo tap tin”);
}
Sưu tầm bởi: www.daihoc.com.vn 
#define MAXCHAR 255
void DocTapTin()
{
FILE* fp;
char dong[MAXCHAR+1];
fp = fopen(“test.txt”,”rt”);
if(fp != NULL)
{
while(!feof(fp)) /* chua cuoi tt*/
{
if(fgets(dong,MAXCHAR,fp)!=NULL)
printf(“%s”,dong);
}
fclose(fp);
}
else
printf(“Khong the mo tap tin”);
}
Sưu tầm bởi: www.daihoc.com.vn 
Thêm dữ liệu vào cuối tập tin văn bản có sẵn
 Gồm 3 bước:
 Mở tập tin bằng hàm fopen() với tùy chọn “at”
 Ghi dữ liệu thêm vào cuối tập tin bằng hàm 
fprintf()
 Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn 
Ví dụ ghép 2 tập tin
/* Copy du lieu tu tap tin 2 vao phia sau tap 
tin 1, tra ve 1 neu thanh cong, tra ve 0 neu 
that bai */
int GhepHaiTapTin(char *tap_tin_1, 
char *tap_tin_2)
{
FILE *fp1,*fp2;
char dong[MAXCHAR +1];
fp1 = fopen(tap_tin_1,"at");
fp2 = fopen(tap_tin_2,"rt"); 
if(fp1==NULL || fp2==NULL)
{
printf("Loi mo tap tin\n");
return 0;
} 
Sưu tầm bởi: www.daihoc.com.vn 
Ví dụ ghép 2 tập tin
fprintf(fp1,"\n");
while(!(feof(fp2))) 
{
if(fgets(dong, MAXCHAR, fp2) !=NULL)
fprintf(fp1,dong); 
} 
fclose(fp1);
fclose(fp2); 
return 1;
}
Sưu tầm bởi: www.daihoc.com.vn 
Xử lý tập tin nhị phân
 Gồm 3 bước:
 Gọi hàm fopen() với tùy chọn có phối hợp với “b”
 Gọi hàm fread() hay fwrite() để đọc dữ liệu từ tập 
tin vào biến bộ nhớ (là biến kiểu mẫu tin) hay ghi 
dữ liệu từ biến bộ nhớ vào tập tin
 Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm đọc, ghi tập tin nhị phân
 Đọc
 Ví dụ
int fread (void * vungnho, size_t sobytedoc, 
size_t solandoc, FILE * tap_tin);
/* Doc vung du lieu tren tap tin dai dien
boi con tro fp, co kich thuoc bang
(sizeof) kich thuoc cua 1 mau tin HOCSINH
dua vao bien mau tin hs */
fread(&hs,sizeof(HOCSINH),1,fp);
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm đọc, ghi tập tin nhị phân
 Ví dụ
 Ghi
/* Ghi mau tin hs len tap tin dai dien
boi con tro fp, co kich thuoc bang
(sizeof) kich thuoc cua 1 mau tin 
HOCSINH*/
fwrite(&hs,sizeof(HOCSINH),1,fp);
size_t fwrite ( const void * vungnho, 
size_t sobyteghi, size_t solanghi, FILE * tap_tin );
Sưu tầm bởi: www.daihoc.com.vn 
Xử lý tập tin gồm các mẫu tin
 Mở tập tin bằng hàm fopen với tùy chọn “r+b” 
để đọc và ghi
 Đóng tập tin bằng hàm fclose
 Có thể dùng hàm fseek để đưa bộ định vị đọc 
ghi đến mẫu tin thích hợp
 Dùng hàm ftell để ghi nhận lại vị trí của mẫu 
tin mà sau này sẽ được cập nhật dữ liệu
 Vẫn đọc và ghi bằng hàm fread và fwrite
Sưu tầm bởi: www.daihoc.com.vn 
Tạo một tập tin gồm các mẫu tin
 Gồm 3 bước:
 Tạo tập tin bằng hàm fopen() với tùy chọn “wb”
 Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là
biến kiểu mẫu tin) vào tập tin
 Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn 
Tạo một tập tin gồm các mẫu tin
int TaoDanhSachHS(char *ten_tap_tin)
{
HOCSINH dshs[3] =
{
{"993236","Lam Vinh Khang",0,0,0},
{"993237","To My Hien",0,0,0},
{"993238","Van Si Ha",0,0,0}
};
FILE *fp;
fp = fopen(ten_tap_tin,"wb");
Sưu tầm bởi: www.daihoc.com.vn 
Tạo một tập tin gồm các mẫu tin
if(fp!=NULL)
{
fwrite(dshs,sizeof(HOCSINH),3,fp);
fclose(fp);
return 1;
}
else
{
printf("Khong the tao tap tin!\n");
return 0;
}
}
Sưu tầm bởi: www.daihoc.com.vn 
Thêm mẫu tin vào tập tin có sẵn
 Gồm 3 bước:
 Gọi hàm fopen() với tùy chọn “ab”
 Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là
biến kiểu mẫu tin) vào tập tin
 Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn 
Đọc danh sách mẫu tin từ tập tin
 Gồm 3 bước:
 Gọi hàm fopen() với tùy chọn “rb”
 Gọi hàm fread() để đọc dữ liệu từ tập tin vào biến 
bộ nhớ (là biến kiểu mẫu tin)
 Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn 
Đọc danh sách mẫu tin từ tập tin
int DocDanhSachHS(char *ten_tap_tin)
{
FILE *fp;
HOCSINH hs;
int stt = 0;
fp = fopen(ten_tap_tin,"rb");
if(fp!=NULL)
{
/* Doc tap tin */
....
Sưu tầm bởi: www.daihoc.com.vn 
Đọc danh sách mẫu tin từ tập tin
while(!feof(fp))
{
stt++;
if(fread(&hs, sizeof(HOCSINH),1,fp)==1)
printf("%5d %6s %20s %f %f %f\n", 
stt, hs.maso, hs.hoten, hs.diem1,
hs.diem2,hs.diem3);
}
fclose(fp);
return 1;
}
else
{
printf("Khong the mo tap tin!\n");
return 0;
}
}
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm quản lý tập tin
 Xóa tập tin
char ten_tap_tin[80];
printf(“Nhap ten tap tin muon xoa: "); 
gets(ten_tap_tin); 
if(remove(ten_tap_tin) == 0) 
printf(“Da xoa tap tin”); 
else
printf( “Loi xoa tap tin”);
int remove ( const char *ten_tap_tin);
 Ví dụ
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm quản lý tập tin
 Đổi tên tập tin
char ten_cu[80], ten_moi[80]; 
printf(“Nhap ten hien tai: ");
gets(ten_cu); 
printf(“Nhap ten moi: "); 
gets(ten_moi); 
if (rename( ten_cu, ten_moi) == 0 ) 
printf(“Da doi ten tap tin”); 
else
printf(“Loi doi ten tap tin”); 
int rename( const char *ten_cu, const char *ten_moi );
 Ví dụ
Sưu tầm bởi: www.daihoc.com.vn 
Các hàm quản lý tập tin
 Sao chép tập tin
 Không có hàm sẵn trong thư viện. Phải tự viết 
bằng cách đọc và ghi dữ liệu dạng nhị phân.
 Tham khảo hàm CopyFile trong sách trang 75.
Sưu tầm bởi: www.daihoc.com.vn 
Kỹ thuật lập trình tập tin
văn bảnđọc dữ liệu dòng ký tự
từ tập tin vào biến 
chuỗi ký tự
fgets
văn bảnđọc dữ liệu từ tập tin 
vào biến số nguyên, 
thực, ký tự
fscanf
văn bảnghi dữ liệu vào tập tinfprintf
văn bản, nhị phânmở tập tin (tập tin mới 
hoặc đã có sẵn)
fopen
Loại tập tinChức năngTên hàm
Sưu tầm bởi: www.daihoc.com.vn 
Kỹ thuật lập trình tập tin
văn bản, nhị
phân
lấy vị trí hiện tạiftell
văn bản, nhị
phân
kiểm tra đã đến cuối tập 
tin hay chưa
feof
văn bản, nhị
phân
đóng tập tin sau khi 
thao tác
fclose
nhị phânghi dữ liệu vào tập tinfwrite
nhị phânđọc dữ liệu từ tập tin 
vào biến 
fread
Loại tập tinChức năngTên hàm
Sưu tầm bởi: www.daihoc.com.vn 
Sưu tầm bởi: www.daihoc.com.vn 
            Các file đính kèm theo tài liệu này:
 taptin_932.pdf taptin_932.pdf