28/08/2011
1
GVGD: Trng Phc Hi
Làm vic vi tp tin
28/08/2011
2
2
Ni dung
1. Khái nim tp tin
2. Phân loi tp tin
3. Các bc x lý tp tin
4. Tp tin vn bn
5. Tp tin nh phân
28/08/2011
3
3
Là đn v lu tr d liu ti b nh ngoài: đa
cng, CD, USB,
D liu lu tr trong tp tin không b mt đi khi
ngng cung cp ngun đin nên có th đc s
dng lâu dài
Có th lu tr d liu vi kích thc ln
Tp tin
28/08/2011
4
4
Ni dung
1. Khái nim tp tin
2. Phân loi tp tin
3. Các bc x lý tp tin
4. Tp tin vn bn
5. Tp tin nh phân
28/08/2011
5
5
Phân loi
Tp tin vn bn (text file)
Lu tr d liu di dng chui các kí t thuc bng mã
ASCII thành các dòng
Mi dòng kt thúc bng kí t xung dòng ‘\n’
Tp tin đc kt thúc bi kí t EOF (End Of File)
Thao tác trên tp tin vn bn là tun t
28/08/2011
6
6
Phân loi
Tp tin nh phân (binary file)
Lu tr d liu di dng mã nh phân, chui các byte
Tp tin đc kt thúc bi kí t EOF (End Of File)
Thao tác d liu trên tp tin nh phân là ngu nhiên
28/08/2011
7
7
Ni dung
1. Khái nim tp tin
2. Phân loi tp tin
3. Các bc x lý tp tin
4. Tp tin vn bn
5. Tp tin nh phân
28/08/2011
8
8
Các bc x lý tp tin
Khai báo bin và m tp tin
Ch đnh loi tp tin (vn bn, nh phân) cn m
Ch đnh thao tác cn thc hin (đc, ghi, thêm, …)
Thc hin thao tác x lý d liu tng ng vi ch
đ đã m
óng tp tin
Th vin cha các thao tác x lý:
<stdio.h>
28/08/2011
9
9
Các bc x lý tp tin
Khai báo con tr tp tin: FILE *<têncontr>;
X lý tp tin: m và thc hin các thao tác x lý
óng tp tin:
fclose(<têncontr>);
void main()
{
//khai báo con tr FILE
FILE *f;
//các thao tác x lý
fclose(f);
}
28/08/2011
10
10
Các hàm x lý tp tin
M tp tin
Cú pháp: fopen(char *đng_dn, char *kiu_m)
Công dng: m tp tin vi đng dn và kiu m đc cho
Kiu m (đc, ghi, thêm) tp tin (vn bn, nh phân) là
chui kt hp t các chui đc cho trong 2 bng sau
Kiu
Ý ngha
r
M
đ đc (tp tin phi tn ti)
w
M
đ ghi (nu tn ti thì ghi đè)
a
M
đ thêm (cha có thì to
mi)
r+
M
đ đc và ghi
w+
To
mi đ đc và ghi
a+
Thêm
hoc to mi đ đc và ghi
Loi
Ý ngha
t
Tp
tin vn bn
b
Tp
tin nh
phân
28/08/2011
11
11
Các hàm x lý tp tin
Ví d m tp tin vn bn text.txt đ ghi
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
void main()
{
FILE *f = fopen(
"text.txt", "wt");
if (f != NULL)
{
cout<<
"mo file thanh cong";
fclose(f);
}
else cout<<"khong mo duoc file";
}
28/08/2011
12
12
Các hàm x lý tp tin
Ví d m tp tin nh phân data.dat đ đc
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
void main()
{
FILE *f = fopen(
"data.dat", "rb");
if (f != NULL)
{
cout<<
"mo file thanh cong";
fclose(f);
}
else cout<<"khong mo duoc file";
}
28/08/2011
13
13
Các hàm x lý tp tin
óng tp tin:
óng 1 tp tin đc ch đnh: int fclose(FILE *f)
óng tt c tp tin đang m: int fcloseall()
Công dng
óng tp tin sau khi kt thúc các thao tác x lý
Khi ghi, d liu vùng đm s đc ghi xung tp tin
Khi đc, d liu vùng đm s b xoá
Gii phóng bin tr tp.
Nu thành công, tr v 0 (đi vi fclose) và s tp tin
đc đóng (đi vi fcloseall), ngc li tr v EOF.
28/08/2011
14
14
Các hàm x lý tp tin
Kim tra đc đn cui tp tin
Cú pháp: int feof(FILE *f)
Công dng: kim tra con tr f đã đc đn cui tp tin
Tr v 0 nu cha đn đn cui
Ngc li tr v giá tr khác 0
while (!feof(f))
{
//các thao tác x lý
}
28/08/2011
15
15
Ni dung
1. Khái nim tp tin
2. Phân loi tp tin
3. Các bc x lý tp tin
4. Tp tin vn bn
5. Tp tin nh phân
28/08/2011
16
16
Tp tin vn bn
Tp tin vn bn lu d liu là các kí t ca bng
mã ASCII
Tp tin vn bn có th đc xem bng chng
trình Notepad, lnh type trong DOS, …
Câu lnh m tp tin vn bn
FILE *f = fopen("filename", "?t");
filename: là tên tp tin có ch đnh đng dn.
? là thao tác đc/ghi d liu tng ng: đc (r), ghi (w),
thêm (a), r+, w+, a+
28/08/2011
17
17
Ghi d liu lên tp tin vn bn
Ghi mt kí t:
Cú pháp: int fputc(int chr, FILE *f)
chr: là mã ASCII ca kí t đc ghi lên tp tin f.
Công dng: ghi kí t chr lên tp tin f
Nu thành công thì tr v kí t ghi đc
Tr v EOF (End Of File) nu gp li
FILE *f = fopen("test.txt", "wt");
for (char c = 'A'; c <= 'Z'; c++)
fputc(c, f);
fclose(f);
28/08/2011
18
18
Ghi d liu lên tp tin vn bn
Hàm ghi chui
Cú pháp: int fputs(const char *buff, FILE *f)
Công dng: ghi chui trong buff lên tp tin f
Nu thành công tr v giá tr không âm
Ngc li tr v EOF
FILE *f = fopen("test.txt", "wt");
char *s = "Mua xuan em di hai hoa";
fputs(s, f);
fclose(f);
28/08/2011
19
19
Ghi d liu lên tp tin vn bn
Hàm ghi chui (có đnh dng):
Cú pháp:
int fprintf(FILE *f, const char *format, )
Công dng: ghi chui vi đnh dng đc ch đnh trong
format lên tp tin
Tr v tng s kí t ghi đc nu thành công
Ngc li tr v giá tr âm
FILE *f = fopen("test.txt", "wt");
char *s = "bao gio cho den thang";
int t = 10;
fprintf(f,
"%s %d", s, t);
fclose(f);
28/08/2011
20
20
Ghi d liu lên tp tin vn bn
Bng chui đnh dng cho hàm fprintf ng vi các
kiu d liu:
nh dng
Ý ngha
%d
Xut giá tr bin kiu int
%ld
Xut giá
tr bin kiu long
%.[a]f
Xut giá
tr bin kiu s thc vi a là s
ch s thp phân.
%o
Xut s
nguyên sang h bát phân
%x
Xut s
nguyên sang h thp lc phân
%c
Xut kí
t
%s
Xut chui
kí t
28/08/2011
21
21
c mt kí t
Cú pháp: int fgetc(FILE *f)
Công dng: đc 1 kí t t tp tin f
Tr v kí t đc đc nu thc thi thành công
Ngc li tr v EOF hoc li tng ng
Ví d minh ha xut toàn b ni dung tp tin ra màn hình
FILE *f = fopen("test.txt", "rt");
while (!feof(f))
{
char c = fgetc(f);
cout<<c;
}
fclose(f);
c d liu t tp tin vn bn
28/08/2011
22
22
Hàm đc chui
Cú pháp: int fgets(char *buf, int n, FILE *f)
Công dng: đc đúng n - 1 kí t hoc cho đn khi gp kí t
xung dòng hay cui tp tin
f
FILE *f = fopen("test.txt", "rt");
char str[11];
fgets(str, 11, f);
cout<<str;
fclose(f);
c d liu t tp tin vn bn
28/08/2011
23
23
Hàm đc chui (có đnh dng)
Cú pháp
int fscanf(FILE *f, const char *format, )
Công dng: đc d liu và lu vào danh sách bin theo
đnh dng (ging fprintf), d liu không cha khong trng
FILE *f = fopen("test.txt", "rt");
char name[50];
int d, m, y;
fscanf(f,
"%s%d%d%d", name, &d, &m, &y);
cout<<name<<
"\n"<<d<<" "<<m<<" "<<y;
fclose(f);
c d liu t tp tin vn bn
Quyen
1 2 1987
28/08/2011
24
24
Ni dung
1. Khái nim tp tin
2. Phân loi tp tin
3. Các bc x lý tp tin
4. Tp tin vn bn
5. Tp tin nh phân
28/08/2011
25
25
c mã hóa và lu tr di dng các byte d liu
D liu tp tin nh phân đc truy xut ngu nhiên
Phi bit đc cu trúc ca tp tin nh phân mi có
th đc đc d liu
Lnh m tp tin nh phân
FILE *f = fopen("path", "?b");
filename: tên tp tin có ch đnh đng dn
? (r, w, a) tng ng thao tác đc, ghi, thêm d liu lên
tp tin
Tp tin nh phân