Đ i H c Bách Khoa Hà N i ộ ạ ọ Vi n Đi n T - Tin H c ọ ử ệ
ệ
Ngôn ng l p trình C/C++
ữ ậ
1
Ch ng 7: D li u ki u t p ươ ể ệ ữ ệ
N i dung chính
ộ
ữ ệ ể ệ
– Khai báo – M t p (open) ở ệ – Đ c t p (read) ọ ệ – Ghi lên t p (write) ệ – Đóng t p (close) ệ
2
• D li u ki u t p (file) • Các thao tác c b n ơ ả
D li u ki u t p
ể ệ
ữ ệ
– T
c l u
ươ
ỗ
, nh ng đ ư
ượ ư
ự ế
• Khái ni m ki u t p (FILE): ể ệ nh ki u chu i kí t ự ự ư ể trên b nh ngoài: ớ ệ ng t ộ
f = c1c2…cn[EOF] Trong đó: EOF (End Of File) là kí t – L u ý: ki u t p trong C có th dùng đ bi u di n
k t thúc t p ệ ể ể
ễ
ể
ể ệ
ư c th m c (directory/folder) ả ư ụ
3
D li u ki u t p
ể ệ
ữ ệ
ủ ệ ề
ị
ặ
(byte) có trong t p (không
ự
ả ố
ệ
ng d n t
ẫ ừ ư ụ ố ế
th m c g c đ n th ư
• Các tính ch t c a t p ấ ủ ệ
ị ụ
– Các thu c tính
– Tên t pệ : theo quy t c đ t tên c a h đi u hành ắ ặ – Ki u t p ể ệ : văn b n (text) ho c nh phân (binary) – Đ dài t p ệ : là s kí t ộ EOF) tính kí t ự – V trí t p ệ : là đ m c hi n t ệ ạ ộ
ườ i ch a t p ứ ệ : ki u File hay Directory, read- ể only hay không, hidden hay không,v.v.
4
Các thao tác c b n
ơ ả
• Khai báo bi n ki u t p: ế ể ệ
– Cú pháp:
FILE *;ế
– Ý nghĩa: khai báo 1 bi n con tr ki u FILE.
ế
ạ
ỏ ể ỏ
ể ự
ệ
Trong C luôn dùng lo i con tr này đ th c hi n các thao tác ti p theo cho t p. ế
ệ
5
Các thao tác c b n
ơ ả
– Cú pháp:
• M t p: ở ệ
FILE *fopen(char *filename, char *mode);
ả ườ
ệ
ồ
Trong đó: filename: tên t p mu n m , bao g m c đ ố ế ệ
ng ư ụ
ằ
ở d n đ n t p n u t p không n m trong th m c ẫ hi n t ệ ạ
mode: ch đ m t p, bao g m c m c đích m ở
ả ụ ố
ở
ế ệ i ế ộ ở ệ ể ọ
ồ t p (đ đ c, ghi) và lo i t p mu n m (text hay ạ ệ ệ binary)
6
M t pở ệ
• Các mode (ch đ ) ế ộ
Ý nghĩa
Giá trị
open for reading
“r”
“w”
open for writing (file need not exist)
“a”
open for appending (file need not exist)
“r+”
open for reading and writing, start at beginning
“w+”
open for reading and writing (overwrite file)
“a+”
open for reading and writing (append if file exists)
“t”
text file (default)
“b”
binary file
7
M t pở ệ
c m thành công, thì s ẽ i trên t p đó. Con ệ
ở có m t con tr v trí hi n t ệ ạ tr v trí này đ • Sau khi m t t p đ ộ ệ ượ ỏ ị ượ
ể ọ ộ
ỏ ể ờ
ở ệ
ể ọ
ặ n m ngay v trí đ u c a t p ầ ủ ệ ằ ố ở ệ ở ế ộ v trí cu i cùng c a t p ủ ệ
ị – Khi m t p n m ằ ở ị
ch đ ghi n i đuôi (“a”), thì nó ố
8
ộ c dùng đ đ c và ghi t p. ệ ỏ ị • V trí con tr này ph thu c vào ch đ m ế ộ ở ụ ị t p (ta có th thay đ i nó nh hàm fseek()): ổ ệ – Khi m t p đ đ c (“r”) ho c ghi đè (“w”), thì nó
Các thao tác c b n
ơ ả
: fread()
9
• Đ c t p: ọ ệ – Đ c t ng ký t : getc(), fgetc() ự ọ ừ – Đ c chu i ký t : fgets() ự ỗ ọ – Đ c m ng các ph n t ầ ử ả ọ
ử ụ ộ ệ ọ
Program 1: đ c n i dung m t t p s d ng ộ fgetc()
#include
#include
void printFile(char * fname); main() {
printf("\n---Doc noi dung tep---\n"); printFile("QueHuong.txt"); getch();
}
10
ử ụ ộ ệ ọ ộ
Program 1: đ c n i dung m t t p s d ng fgetc() (ti p)ế
void printFile(char * fname){
//open file for reading char ch; FILE *f=fopen(fname,"r"); if (f==NULL){
printf("Error opening file"); return;
} while ((ch=fgetc(f)) != EOF) {
printf("%c",ch);
} fclose(f);
}
11
K t qu ch y Program 1 ạ
ế
ả
12
ử ụ ộ ệ ọ
Program 2: đ c n i dung m t t p s d ng ộ fgets()
#include
printf("\n---Doc noi dung tep---\n"); printFileByLines(“LamAnh.txt"); getch();
13
}
ử ụ ộ ệ ọ ộ
if (fgets (mystring , MAX , pFile) !=NULL)
printf("%s", mystring);
Program 2: đ c n i dung m t t p s d ng fgets() (ti p)ế
void printFileByLines(char * fname) { FILE * pFile; char mystring [MAX]; pFile = fopen (fname , "r"); if (pFile == NULL){ printf("Error opening file"); return; } while (!feof(pFile)) { } fclose (pFile); }
14
K t qu ch y Program 2 ạ
ế
ả
15
Các thao tác c b n
ơ ả
: fwrite()
– Ghi t ng ký t : putc(), fputc() ự ừ – Ghi chu i ký t : fputs() ự ỗ – Ghi m ng các ph n t ầ ử ả
16
• Ghi lên t p:ệ
bàn phím ậ ừ ộ
Program 3: ghi n i dung nh p t lên t p s d ng các hàm fputc và fputs() ử ụ
if (f1==NULL){ printf("Error opening file"); return; } while ((ch=getche()) != ESC){ if (ch==CR){
ệ
#include
"\015\012" #define ESC 27 #define CR 13 void main() {
fputs(END_LINE,f1); printf("\n");
} else fputc(ch,f1); } fclose(f1); printf("\nDone!");
} //end main
FILE *f1; char ch; printf("\nWriting to me now:\n"); //open file for writing f1=fopen("data.txt","w");
17
K t qu ch y Program 3 ạ
ế
ả
18
Các thao tác c b n
ơ ả
– Hàm fseek(): di chuy n con tr v trí t p ệ – Hàm ftell(): tr v v trí hi n t
i c a con tr v trí
ỏ ị ệ ạ ủ
ỏ ị
• Truy nh p tr c ti p t p: ậ
t pệ
19
ự ế ệ ể ả ề ị
Truy nh p tr c ti p t p
ự ế ệ
ậ
ỏ ị
ặ
ớ
ị
kho ng offset t
ả
ế ầ
ừ ị – origin có th là 1 trong 3 h ng s : ố
v trí ban đ u origin ằ
ể
i
ệ ạ
• SEEK_SET: t • SEEK_CUR: t • SEEK_END: t
đ u t p ừ ầ ệ v trí hi n t ừ ị cu i t p ừ ố ệ
20
• Hàm fseek(): – Cú pháp: int fseek ( FILE * stream, int offset, int origin ); – Ý nghĩa: đ t con tr v trí đ n v trí m i thêm m t ộ
Program 4: Tính kích th c m t t p có tên ộ ệ
cho tr ướ cướ
#include
#include
long fileLen(char * fname);
main()
{
char sFileName[] = "QueHuong.txt"; printf("\nKich thuoc tep %s: %ld\n", sFileName, fileLen(sFileName));
getch();
}
21
Program 4: Tính kích th ộ ệ
cho tr ướ c m t t p có tên ướ c (ti p) ế
long fileLen(char * fname){
long lfile=0; FILE *f=fopen(fname,"r"); if (f==NULL){
printf("Error opening file"); lfile = -1;
}else {
fseek(f,0,SEEK_END); lfile = ftell(f); fclose(f);
} return lfile;
}
22
K t qu ch y Program 4 ạ
ế
ả
23
Các thao tác c b n
ơ ả
– Cú pháp: fclose (FILE* f); – Ý nghĩa: k t thúc vi c s d ng file (g m m , ở ế
ệ
ể
ồ ệ c ghi s đ
ẽ ượ ẩ
ệ ử ụ đ c và ghi). Khi m t p đ ghi, thì vi c đóng t p ở ệ ọ c đ y ra s đ m b o các d li u đ ữ ệ ượ ẽ ả vùng b đ m, thi ộ ệ
ả t b l u tr t ế ị ư
ữ ừ
24
• Đóng t p:ệ
Tóm t
ắ ộ
t n i dung đã h c ọ
ệ
25
• Khái ni m và các tính ch t c a t p ấ ủ ệ • Các thao tác c b n trên t p ệ ơ ả
Summary of File operations in C*
Function Name
Operation
fopen()
Creates a new file for use Opens a new existing file
Closes a file which has been opened for use
fclose
getc(), fgetc()
Reads a character from a file
fgets()
Reads a string from a file
putc(), fputc()
Writes a character to a file
Writes a string to a file
fputs()
Writes a set of data values to a file
fprintf()
Reads a set of data values from a file
fscanf()
26
Summary of File operations in C*
Function Name
Operation
getw()
Reads an integer from a file
putw()
Writes an integer to the file
fread()
Reads an array of elements from a file
fwrite()
Writes an array of elements to a file
fseek()
Sets the position to a desired point in the file
ftell()
Gives the current position in the file
rewind()
Sets the position to the begining of the file
27
Bài t pậ
ng trình đ m s t có trong t ch ố ừ ế
• Bài 1: vi ộ ệ • Bài 2: vi ng trình đ m s ký t ế ự ố
ươ ế m t t p văn b n ả t ch ươ ế ộ ệ ự
có trong m t t p văn b n (không tính các ký t ả k t thúc dòng) t ch ng trình tách đ u m t t p ế • Bài 3: vi ộ ệ ề
• Bài 4: vi t ch
ng trình tách m t t p thành c không l n h n MAX ớ ướ ộ ệ ơ
28
ươ ế làm hai t p con ệ ươ ế các t p có kích th ệ cướ cho tr