Đ 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 #include #define MAX 300 void printFileByLines(char * fname); main(){

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 #define END_LINE

"\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