int fprintfFILE *f, const char *format, ..... int fscanfFILE *f, const char *format, ...
Trang 128/08/2011
1 GVGD: Tr ng Ph c H i
Làm vi c v i t p tin
Trang 3 D li u l u tr trong t p tin không b m t đi khi
ng ng cung c p ngu n đi n nên có th đ c s
d ng lâu dài
Có th l u tr d li u v i kích th c l n
T p tin
Trang 5 Thao tác trên t p tin v n b n là tu n t
Trang 628/08/2011
6
6
Phân lo i
T p tin nh phân (binary file)
Thao tác d li u trên t p tin nh phân là ng u nhiên
Trang 10chu i k t h p t các chu i đ c cho trong 2 b ng sau
Trang 13 Gi i phóng bi n tr t p
đ c đóng (đ i v i fcloseall), ng c l i tr v EOF
Trang 16FILE *f = fopen( "filename" , "?t" );
? là thao tác đ c/ghi d li u t ng ng: đ c (r), ghi (w),
thêm (a), r+, w+, a+
Trang 17 chr: là mã ASCII c a kí t đ c ghi lên t p tin f
Công d ng: ghi kí t chr lên t p tin f
FILE *f = fopen( "test.txt" , "wt" );
for ( char c = 'A' ; c <= 'Z' ; c++)
fclose(f);
Trang 18 Công d ng: ghi chu i trong buff lên t p tin f
FILE *f = fopen( "test.txt" , "wt" );
char *s = "Mua xuan em di hai hoa" ;
fputs(s, f);
fclose(f);
Trang 19int fprintf(FILE *f, const char *format, )
Công d ng: ghi chu i v i đ nh d ng đ c ch đ nh trong
format lên t p tin
FILE *f = fopen( "test.txt" , "wt" );
char *s = "bao gio cho den thang" ;
int t = 10;
fprintf(f, "%s %d" , s, t);
fclose(f);
Trang 2028/08/2011
20
20
Ghi d li u lên t p tin v n b n
B ng chu i đ nh d ng cho hàm fprintf ng v i các
Trang 21FILE *f = fopen( "test.txt" , "rt" );
Trang 2228/08/2011
22
22
Hàm đ c chu i
Công d ng: đ c đúng n - 1 kí t ho c cho đ n khi g p kí t
Trang 23int fscanf(FILE *f, const char *format, )
Công d ng: đ c d li u và l u vào danh sách bi n theo
đ nh d ng (gi ng fprintf), d li u không ch a kho ng tr ng
FILE *f = fopen( "test.txt" , "rt" );
Trang 25FILE *f = fopen( "path" , "?b" );
? (r, w, a) t ng ng thao tác đ c, ghi, thêm d li u lên
t p tin
T p tin nh phân
Trang 26fwrite( void *buf, int size, int n, FILE *f)
Công d ng: ghi block d li u c a buf vào t p tin f
n: s buf c n ghi
đ c ghi không trùng v i s buf c n ghi ngh a là l i
Ghi d li u vào t p tin nh phân
Trang 2728/08/2011
27
27
Ghi d li u vào t p tin nh phân
Ví d minh h a ghi m ng c u trúc nhân viên vào
t p tin data.dat
void WriteFile(NhanVien *nv, int n)
{
FILE *f = fopen( "data.dat" , "wb" );
for ( int i = 0; i < n; i++)
fwrite(&nv[i], sizeof (NhanVien), 1, f);
fclose(f);
}
Trang 28fread( void *buf, int size, int n, FILE *f)
Trang 29FILE *f = fopen( "data.dat" , "rb" );
while (fread(&nv[n], sizeof (NhanVien),1, f))
fclose(f);
}
Trang 3028/08/2011
30
30
Hàm d ch chuy n con tr FILE:
int fseek(FILE *f, long off, int xp)
tr khác 0
Di chuy n con tr t p tin
Trang 3128/08/2011
31
31
Hàm d ch chuy n con tr FILE:
Di chuy n con tr t p tin
Trang 32nhân viên th i (tính t 0) đ c l u trong t p tin
void Update( int i, double HeSoMoi)
{
NhanVien nv;
FILE *f = fopen( "data.dat" , "a+b" );
fseek(f, i* sizeof (NhanVien), SEEK_SET);
fread(&nv, sizeof (NhanVien), 1, f);
nv.HeSoLuong = HeSoMoi;
fseek(f, i* sizeof (NhanVien), SEEK_SET);
fwrite(&nv, sizeof (NhanVien), 1, f);
fclose(f);
}