Tải bản đầy đủ (.ppt) (18 trang)

Tin học cơ sở 4 FILE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (307.23 KB, 18 trang )

Tin Học Cơ Sở 4
Làm Việc Với Tệp Tin (File)


Cơ bản về tập tin
• Lưu trữ trong tập tin: Giá trị nhị phân
• Trường hợp lưu trữ chuẩn (không mã hóa)
– Ký tự: Mã ASCII - UNICODE
– Chuỗi ký tự: Chuỗi mã ASCII của từng ký tự
– Số: chuỗi mã ASCII của ký số hoặc biểu diễn
nhị phân của số.
• Đặc điểm truy xuất dữ liệu trong tập tin:
tuần tự từng byte.
Lê Nguyên Khôi

2


Cơ bản về tập tin
• Hệ điều hành xác định 1 file bằng Absolute
Path hay Relative Path. Đó là 1 chuỗi ký tự.
• Một thí dụ về Absolute Path trong C
– “C:\\TM1\\TM11\\f1.txt” hoặc
– “C:/TM1/TM11/f1.txt”
• Với 1 file nằm trong thư mục hiện hành, chỉ
cần chỉ định file này bằng tên file ngắn gọn
(relative path). Ví dụ : “nhanvien.dat”
Lê Nguyên Khôi

3



Phân loại tập tin
• Tập tin văn bản:
– Dữ liệu lưu trữ là mã ASCII của ký tự chữ số.
01000001010000100011000100110010
‘A’
‘B’
‘1’
‘2’
• Tập tin nhị phân:
– Dữ liệu lưu trữ là dạng nhị phân của dữ liệu.
0100000101000010000000....001100
‘A’
‘B’
‘12’
Lê Nguyên Khôi

4


Hệ điều hành đượ c ủy thác truy xuất tập tin
byte 1800

(4) Địa chỉ
file desc.
đưa vào
biến f của
chương
trình


Bộ nhớ của
chương
trình C

Path, Last accessed date,
filesize, Current position,..

code segment
...........
...........
f= fopen(“t1.txt”.”r”);

.....
Data segment
biến File*f

1800

(3) OS đọc file
description data

OS
(1)chương
trình nhờ
OS mở tập
tin

Disk
(2) OS
kiểm tra

sự tồn tại
của tập tin

Mọi thao tác file trong chương trình đều thông qua biến f
Lê Nguyên Khôi

5

Thao tác file chuẩn là thao tác file thông qua hệ điều hành


Khai báo biến tập tin trong C
FILE *f ;
Chú ý:
• Kiểu FILE được khai báo trong thư viện
stdio.h
• Khai báo File *f; là SAI.

Lê Nguyên Khôi

6


Hai thao tác cơ bản với tập tin
• Đọc dữ liệu từ tập tin ra biến  Đọc file
• Ghi dữ liệu từ biến vào tập tin  Ghi file

Lê Nguyên Khôi

7



Các bướ c đọ c file
(1)
(2)
(3)
(4)

Chọn sách
Mở sách để đọc
Chọn vị trí sẽ đọc
Lặp khi chưa xong

(4.1) Đọc dữ liệu vào đầu
(4.2) Xử lý dữ liệu trong đầu

(5) Đóng sách

(1)
(2)
(3)
(4)

Chọn file (hàm main làm)
Mở file để đọc
Chọn vị trí sẽ đọc
Lặp khi chưa xong

(4.1) Đọc dữ liệu từ filebiến
(4.2) Xử lý biến


(5) Đóng file

• Nếu đọc dữ liệu từ đầu file thì bỏ qua bước chọn vị
trí sẽ đọc. Vị trí mặc định của file ngay sau khi mở
file là đầu file.
Lê Nguyên
Khôi thì tên file là tham số.
8
• Nếu viết
hàm


Các bướ c ghi file
(1)
(2)
(3)
(4)

Chọn sách
Mở sách để ghi
Chọn vị trí sẽ ghi
Lặp khi chưa xong

(4.1) Chuẩn bị dữ liệu trong đầu
(4.2) Ghi dữ liệu trong đầu lên file

(5)

Đóng sách


(1)
(2)
(3)
(4)

Chọn file (hàm main làm)
Mở file để ghi
Chọn vị trí sẽ ghi
Lặp khi chưa xong

(4.1) Chuẩn bị giá trị cho biến
(4.2) Ghi biến  File

(5) Đóng file

• Nếu ghi dữ liệu từ đầu file thì bỏ qua bước chọn vị trí sẽ
ghi. Vị trí mặc định của file ngay sau khi mở file là đầu file.
• Nếu viết hàm thì tên file là tham số.
Lê Nguyên Khôi

9


Thao tác file chuẩn









Thư viện stdio.h
Mở file
Đóng file
Di chuyển trong file
Kiểm tra đã hết file chưa?
Thao tác với vị trí hiện hành
Đổi tên/hủy 1 file đã đóng
Lê Nguyên Khôi

10


Mở file
• FILE* fopen (const char* filename, const char* mode);

mode
Text file
Binary file
Description
“r”, “rt”
“rb”
read
“w”, “wt”
“wb”
write, ghi đè nếu file đã tồn tại
“a”
“a”

append, mở mới nếu file chưa có
“r+”, “r+t”
“r+b”
mở để vừa đọc vừa ghi
“w+”, “w+t”
“w+b”
mở để vừa đọc vừa ghi
“a+”, “a+t”
“a+b”
mở để vừa đọc + ghi ở cuối
file,
mở mới nếu file chưa tồn tại.
• Trả trị: NULL : thất bại Khác NULL: thành công.
• Ví dụ: FILE* f = fopen(“c:\\tm1\\tm2\\f1.txt” , ”r” );
Lê Nguyên Khôi

11


Đóng file
• int fclose(FILE* f);
– Trả trị: 0: thành công
– Trả giá trị EOF ( hằng -1) thất bại
– Ví dụ:
int

FileExist (const char* fname){
FILE* f = fopen(fname, “r”);
int result = (f==NULL)? 0 : 1;
if (f) fclose(f);

return result;

}
Lê Nguyên Khôi

12


Kiểm tra hết file chưa?
• int feof(FILE* f)
– Trả trị: 1: Hết file rồi
– Trả trị 0: chưa hết file

Lê Nguyên Khôi

13


Di chuyển trong file
• Về đầu file : void rewind (FILE* f);
• Dời n byte từ 1 vị trí:
fseek (FILE* f, long n, long pos);
pos = SEEK_SET (hằng 0) : từ đầu file
pos = SEEK_CUR (hằng 1): từ vị trí hiện hành
pos = SEEK_END (hằng 2): từ cuối file
n>0 : dời tới, n<0: dời lùi, n=0: đứng tại chỗ
Dời quá biên: gây lỗi
Lê Nguyên Khôi

14



Thao tác với vị trí hiện hành
• Lấy vị trí hiện hành trong file:
long ftell(FILE* f);

• Lưu vị trí hiện hành
int fgetpos(FILE *f, fpos_t *pos);

• Thiết lập vị trí hiện hành từ vị trí đã lưu
int fsetpos(FILE *f, const fpos_t *pos);

Lê Nguyên Khôi

15


Thao tác với vị trí hiện hành
long filelength(const char* fname)
{
FILE *f = fopen(fname, “r”);
fseek(f , 0, SEEK_END);
long len = ftell(f);
fclose(f);
return len;
}

Lê Nguyên Khôi

16



Đổi tên/Huỷ 1 file đã đóng
• int rename (const char* oldName,
const char* newName);
• int remove (const char* filename);
• Trả giá trị 0: thành công
• Trả giá trị -1: thất bại
• OS không thể đổi tên/hủy 1 file đang mở

Lê Nguyên Khôi

17


Đọc/ghi dữ liệu với file đã mở
Thao tác với Đọc file  biến
Ký tự
c=fgetc(f);
char c

Ghi biến  filw
fputc(c,f);

Chuỗi ký tự
char S[];

fgets(S, n, f)

fputs (S,f);


Số

fscanf(f,”format”,
&var);

fprintf(f,”format”,
var);

n Cấu trúc
nhị phân

size_t fread
int fwrite
(&Rec,sizeof(struct),n,f) (&Rec,sizeof(struct),
n,f )

Lê Nguyên Khôi

18



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×