Microsoft PowerPoint IP 09 File in C XửXử lýlý tậptập tintin GV GV NguyễnNguyễn Minh Minh HuyHuy XửXử lýlý tậptập tintin 1Nhập môn lập trình GV Nguyễn Minh Huy NộiNội dungdung �� ThiếtThiết bịbị vàvà[.]
Trang 2Thiết Thiết bị bị và và stream stream.
Các Các thao thao tác tác trên trên tập tập tin tin.
Trang 3Thiết Thiết bị bị và và stream stream.
Các Các thao thao tác tác trên trên tập tập tin tin.
Trang 4Khái Khái niệm niệm thiết thiết bị bị::
Dữ Dữ liệu liệu Chương Chương trình trình Kết Kết quả quả
Chương Chương trình trình lấy lấy dữ dữ liệu liệu từ từ đâu đâu? ?
Chương Chương trình trình xuất xuất kết kết quả quả ra ra đâu đâu? ?
Thiết Thiết bị bị (device) (device).
Phân Phân loại loại thiết thiết bị bị::
ThiếtThiết bịbị nhậpnhập: : bànbàn phímphím, con , con chuộtchuột, , tậptập tin, Btin, B
ThiếtThiết bịbị xuấtxuất: : mànmàn hìnhhình, , máymáy in, in, tậptập tin, Btin, B
TậpTập tin tin làlà thiếtthiết bịbị vừavừa nhậpnhập vừavừa xuấtxuất
Trang 5Khái Khái niệm niệm stream: stream:
Chương Chương trình trình đọc đọc//ghi ghi dữ dữ liệu liệu từ từ thiết thiết bị bị thế thế nào nào? ?
Thông Thông qua qua những những ““dòng dòng chảy chảy” ” dữ dữ liệu liệu
Stream Stream.
Phân Phân loại loại stream: stream:
Stream Stream nhậpnhập: “: “dòngdòng chảychảy” ” vàovào chươngchương trìnhtrình từtừ thiếtthiết bịbị nhậpnhập
Stream Stream xuấtxuất: “: “dòngdòng chảychảy” ” khỏikhỏi chươngchương trìnhtrình từtừ thiếtthiết bịbị xuấtxuất
Trang 6Khái Khái niệm niệm stream: stream:
Các Các stream stream định định nghĩa nghĩa sẵn sẵn trong trong C: C:
Stream Ý nghĩa Thiết bị kết nối
stdin Stream nhập chuẩn Bàn phím
stdout Stream xuất chuẩn Màn hình
stderr Stream lỗi chuẩn Màn hình
Lệnh Lệnh nhập nhập xuất xuất tổng tổng quát quát::
fscanf fscanf((<Stream>, “<<Stream>, “<ĐịnhĐịnh dạngdạng kiểukiểu>”, &<>”, &<BiếnBiến 1>, B1>, B));;
fprintf fprintf((<Stream>, “<<Stream>, “<ĐịnhĐịnh dạngdạng xuấtxuất>”, <>”, <BiếnBiến 1>, B1>, B));;
fprintf fprintf( ( stdout stdout, “Hello World” );, “Hello World” ); // // Xuất Xuất ra ra màn màn hình hình
fprintf fprintf( ( stdprn stdprn, “Hello World” );, “Hello World” ); // // Xuất Xuất ra ra máy máy in in.
stderr Stream lỗi chuẩn Màn hình
stdprn Stream in chuẩn Máy in
Trang 7Thiết Thiết bị bị và và stream stream.
File stream.
Các Các thao thao tác tác trên trên tập tập tin tin.
Trang 8File stream
Nhập Nhập xuất xuất bằng bằng tập tập tin: tin:
Ưu Ưu điểm điểm::
ChứaChứa đượcđược nhiềunhiều dữdữ liệuliệu
KhôngKhông cầncần thôngthông qua qua ngườingười dùngdùng
LưuLưu trữtrữ đượcđược lâulâu dàidài
Khuyết Khuyết điểm điểm::
Khuyết Khuyết điểm điểm::
TốcTốc độđộ xửxử lýlý chậmchậm
Trang 9File stream
Nhập Nhập xuất xuất tập tập tin tin trong trong C: C:
Dùng Dùng file stream file stream.
““DòngDòng chảychảy” ” kếtkết nốinối chươngchương trìnhtrình vàvà tậptập tin.tin
KhaiKhai báobáo: : FILE * FILE *<<TênTên stream>.stream>
FILE * FILE *f1;f1;
FILE * FILE *f2;f2;
FILE * FILE *f2;f2;
Các Các bước bước xử xử lý lý tập tập tin: tin:
BướcBước 1: 1: mởmở tậptập tin.tin
BướcBước 2: 2: thaothao táctác trêntrên tậptập tin.tin
BướcBước 3: 3: đóngđóng tậptập tin.tin
Trang 10File stream
Lệnh Lệnh mở mở tập tập tin: tin:
Thiết Thiết lập lập một một file stream file stream đến đến tập tập tin tin.
CúCú pháppháp: : fopen fopen((“<“<ĐườngĐường dẫndẫn tậptập tin>”, “<tin>”, “<ChếChế độđộ mởmở>”>”));;
TrảTrả vềvề: file stream (: file stream (thànhthành côngcông), NULL (), NULL (thấtthất bạibại).)
BảngBảng cáccác chếchế độđộ mởmở tậptập tin:tin:
r Read-only, mở để đọc dữ liệu (kiểu text).
Trả về NULL nếu không tìm thấy tập tin.
w Write-only, mở để ghi dữ liệu (kiểu text).
Tập tin sẽ được tạo nếu chưa có, ngược lại sẽ ghi đè.
a Append-only, mở để ghi thêm dữ liệu (kiểu text).
Tập tin sẽ được tạo nếu chưa có.
[Chế độ mở]+ Kết hợp đọc, ghi cùng lúc.
[Chế độ mở]b Đọc, ghi kiểu nhị phân (binary).
Trang 11File stream
Lệnh Lệnh đóng đóng tập tập tin: tin:
Hủy Hủy file stream file stream đến đến tập tập tin tin.
Cú phápCú pháp: : fclose fclose((<File stream> <File stream>));;
ChỉChỉ đóngđóng đượcđược tậptập tin tin đangđang mởmở
LuônLuôn đóngđóng tậptập tin tin sausau khikhi kếtkết thúcthúc côngcông việcviệc
printf printf(“ (“Khong Khong mo mo duoc duoc tap tin! tap tin!\\n”); n”);
fclose fclose(( f f ));; // // Sai Sai
}}
else {{
printf printf(“ (“Da Da mo mo duoc duoc tap tin! tap tin!\\n”); n”);
fclose fclose(( f f ));; // // Đúng Đúng
}}
Trang 12File stream
Vị Vị trí trí nhập nhập xuất xuất hiện hiện hành hành::
Điểm Điểm kết kết nối nối của của F File ile stream stream vào vào tập tập tin tin.
Nhập Nhập xuất xuất luôn luôn bắt bắt đầu đầu từ từ vị vị trí trí hiện hiện hành hành
Vị Vị trí trí hiện hiện hành hành thay thay đổi đổi sau sau mỗi mỗi thao thao tác tác nhập nhập xuất xuất
Trang 13File stream
Lệnh Lệnh thay thay đổi đổi vị vị trí trí hiện hiện hành hành::
Thay Thay đổi đổi điểm điểm kết kết nối nối File stream File stream vào vào tập tập tin tin.
Cú phápCú pháp: : fseek fseek((<File stream>, <<File stream>, <ĐộĐộ dờidời>, <>, <VịVị trítrí gốcgốc>>));;
<<VịVị trítrí gốcgốc>:>:
SEEK_SET ( SEEK_SET (đầu đầu tập tập tin) tin).
SEEK_CUR ( SEEK_CUR (vị vị trí trí hiện hiện hành hành) ).
SEEK_END ( SEEK_END (cuối cuối tập tập tin) tin).
ChỉChỉ thaythay đổiđổi vịvị trítrí hiệnhiện hànhhành vớivới tậptập tin tin đangđang mởmở
FILE
FILE *f *f = = fopen fopen((“C:“C:\\\\BaiTap.txt”, “BaiTap.txt”, “rr”);”);
if (
if ( ff != NULL )!= NULL ) {{
fseek
fseek(( ff, 2, SEEK_CUR , 2, SEEK_CUR ));; // // Tiến Tiến tới tới 2 bytes 2 bytes.
fclose fclose( f ); ( f );
}}
Trang 14File stream
Lệnh Lệnh thông thông báo báo vị vị trí trí hiện hiện hành hành::
Thông Thông báo báo vị vị trí trí hiện hiện hành hành so so với với đầu đầu tập tập tin tin.
CúCú pháppháp: : ftell ftell((<File stream> <File stream>));;
ChỉChỉ thôngthông báobáo vịvị trítrí hiệnhiện hànhhành vớivới tậptập tin tin đangđang mởmở
fseek fseek( f, 0, SEEK_END ); ( f, 0, SEEK_END );
long
long filesize filesize = = ftell ftell(( ff ));; // // Lấy Lấy kích kích thước thước tập tập tin tin.
fclose fclose( f ); ( f );
}}
Trang 15Thiết Thiết bị bị và và stream stream.
Các Các thao thao tác tác trên trên tập tập tin tin.
Trang 16Các Các thao thao tác tác cơ cơ bản bản::
Đọc Đọc dữ dữ liệu liệu: : theo theo định định dạng dạng
CúCú pháppháp::
fscanf fscanf((<File stream>, “<<File stream>, “<ĐịnhĐịnh dạngdạng kiểukiểu>”, &<>”, &<BiếnBiến 1>, B1>, B));;
TrảTrả vềvề: : sốsố biếnbiến đọcđọc đượcđược ((thànhthành côngcông), EOF (), EOF (thấtthất bạibại).)
int a, b a, b;;
int a, b a, b;;
FILE *f = FILE *f = fopen fopen(“C: (“C:\\\\BaiTap.txt”, “BaiTap.txt”, “rr”);”);
if ( f == NULL ) printf
printf(“ (“Khong Khong mo mo duoc duoc tap tin! tap tin!\\n”); n”);
else {{
fscanf fscanf( ( f, “%d %d”, f, “%d %d”, &a, &b &a, &b ));;
fclose fclose( f ); ( f );
}}
Trang 17Các Các thao thao tác tác cơ cơ bản bản::
Đọc Đọc ký ký tự tự::
CúCú pháppháp: : fgetc fgetc((<File stream> <File stream>));;
TrảTrả vềvề: : kýký tựtự ((thànhthành côngcông), EOF (), EOF (thấtthất bạibại).)
Đọc Đọc chuỗi chuỗi::
Cú
Cú pháppháp: : fgets fgets((<<BiếnBiến chuỗichuỗi>, <>, <SốSố kýký tựtự>, <File stream>>, <File stream>));;
CúCú pháppháp: : fgets fgets((<<BiếnBiến chuỗichuỗi>, <>, <SốSố kýký tựtự>, <File stream>>, <File stream>));;
Ý Ý nghĩanghĩa: : đọcđọc chuỗichuỗi đếnđến khikhi gặpgặp kýký tựtự \\n n hoặchoặc đủđủ <<SốSố kýký tựtự>.>
TrảTrả vềvề: : độđộ dàidài chuỗichuỗi ((thànhthành côngcông), EOF (), EOF (thấtthất bạibại).)
char
char s[100] s[100];;
FILE *f = FILE *f = fopen fopen(“C: (“C:\\\\BaiTap.txt”, “BaiTap.txt”, “rr”);”);
if ( f != NULL ) {{
fgets fgets( s ( s, 99, f , 99, f ));;
fclose fclose( f ); ( f );
}}
Trang 18Các Các thao thao tác tác cơ cơ bản bản::
Ghi Ghi dữ dữ liệu liệu: : theo theo định định dạng dạng
Cú phápCú pháp::
fprintf fprintf((<File stream>, “<<File stream>, “<ĐịnhĐịnh dạngdạng kiểukiểu>”, <>”, <BiếnBiến 1>, B1>, B));;
TrảTrả vềvề: : sốsố byte byte ghighi đượcđược ((thànhthành côngcông), EOF (), EOF (thấtthất bạibại).)
printf(“ (“Khong Khong tao tao duoc duoc tap tin! tap tin!\\n”); n”);
else {{
fprintf
fprintf( ( f, “f, “Gia Gia tri = %d %f %c”, tri = %d %f %c”, a, b, c a, b, c ));;
fclose fclose( f ); ( f );
}}
Trang 19Các Các thao thao tác tác cơ cơ bản bản::
Đọc Đọc dữ dữ liệu liệu: : theo theo khối khối byte (binary) byte (binary).
CúCú pháppháp::
fread
fread((<<VùngVùng nhớnhớ>, <>, <KíchKích thướcthước khốikhối> , <> , <SốSố khốikhối đọcđọc>, <File stream>>, <File stream>));;
TrảTrả vềvề: : sốsố khốikhối thậtthật sựsự đọcđọc đượcđược
KếtKết thúcthúc tậptập tin tin khikhi sốsố khốikhối thậtthật sựsự < < sốsố khốikhối đọcđọc
KếtKết thúcthúc tậptập tin tin khikhi sốsố khốikhối thậtthật sựsự < < sốsố khốikhối đọcđọc
int a[10] a[10];;
char
char s[100] s[100];;
FILE *f = FILE *f = fopen fopen(“C: (“C:\\\\BaiTap.txt”, “BaiTap.txt”, “rb rb”);”);
if ( f != NULL ) {{
fread
fread( a ( a, , sizeof sizeof((int int), 10, ), 10, f f ));; // // Đọc Đọc 10 10 số số nguyên nguyên
fread fread( s ( s, , sizeof sizeof(char), 100, (char), 100, f f )); ; // // Đọc Đọc 100 100 ký ký tự tự
fclose fclose( f ); ( f );
}}
Trang 20Các Các thao thao tác tác cơ cơ bản bản::
Ghi Ghi dữ dữ liệu liệu: : theo theo khối khối byte (binary) byte (binary).
Cú phápCú pháp::
fwrite
fwrite((<<VùngVùng nhớnhớ>, <>, <KíchKích thướcthước khốikhối> , <> , <SốSố khốikhối>, <File stream>>, <File stream>));;
TrảTrả vềvề: : sốsố khốikhối thậtthật sựsự ghighi đượcđược
if ( f != NULL ) {{
fwrite
fwrite( a ( a, , sizeof sizeof((int int), 3, ), 3, f f ));; // // Ghi Ghi 3 3 số số nguyên nguyên
fwrite fwrite( s ( s, , sizeof sizeof(char), (char), strlen strlen(s), (s), f f )); // ; // Ghi Ghi chuỗi chuỗi s s.
fclose fclose( f ); ( f );
}}
Trang 21Các Các thao thao tác tác cơ cơ bản bản::
Sao Sao chép chép 2 files: 2 files:
#define SO_BYTE 100 char
char a[ SO_BYTE ] a[ SO_BYTE ];;
FILE **f_dich f_dich = = fopen fopen(“C: (“C:\\\\BaiTap_Copy.txt”, “BaiTap_Copy.txt”, “wb wb”); ”);
int soluong soluong;;
} while (
} while (soluong soluong == SO_BYTE); == SO_BYTE);
fcloseall fcloseall(); ();
}}
Trang 22Một Một số số lệnh lệnh quản quản lý lý tập tập tin: tin:
Xóa Xóa tập tập tin: tin:
CúCú pháppháp: : remove( remove(“<“<ĐườngĐường dẫndẫn tậptập tin>”tin>”));;
TrảTrả vềvề: 0 (: 0 (thànhthành côngcông), ), 1 (1 (thấtthất bạibại).)
KhôngKhông cầncần phảiphải mởmở vàvà đóngđóng tậptập tin.tin
if (if (remove( remove(“C:“C:\\\\BaiTap1.txt”BaiTap1.txt”)) == == 0 0))
printf printf(“ (“Da Da xoa xoa thanh thanh cong! cong!\\n”); n”);
else
printf printf(“ (“Khong Khong xoa xoa duoc duoc!!\\n”); n”);
Trang 23Một Một số số lệnh lệnh quản quản lý lý tập tập tin: tin:
Đổi Đổi tên tên tập tập tin: tin:
CúCú pháppháp: : rename( rename(“<“<ĐườngĐường dẫndẫn cũcũ”, “<”, “<ĐườngĐường dẫndẫn mớimới>”>”));;
HaiHai đườngđường dẫndẫn phảiphải cùngcùng mộtmột ổ ổ đĩađĩa
TrảTrả vềvề: 0 (: 0 (thànhthành côngcông), ), 1 (1 (thấtthất bạibại).)
CóCó thểthể dùngdùng đểđể didi chuyểnchuyển tậptập tin.tin
CóCó thểthể dùngdùng đểđể didi chuyểnchuyển tậptập tin.tin
KhôngKhông cầncần phảiphải mởmở vàvà đóngđóng tậptập tin.tin
if (
if (rename( rename(“C:/BaiTap1.txt”, “C:/BaiTap“C:/BaiTap1.txt”, “C:/BaiTap\\\\BaiTap2.txt”BaiTap2.txt”)) == == 0 0))
printf printf(“ (“Da Da doi doi ten ten thanh thanh cong! cong!\\n”); n”);
else
printf printf(“ (“Khong Khong doi doi ten ten duoc duoc!!\\n”); n”);
Trang 24Thiết Thiết bị bị và và stream: stream:
Chương Chương trình trình trao trao đổi đổi dữ dữ liệu liệu với với thiết thiết bị bị
Stream Stream kết kết nối nối chương chương trình trình và và thiết thiết bị bị
Kết Kết nối nối chương chương trình trình và và tập tập tin tin.
Kết Kết nối nối chương chương trình trình và và tập tập tin tin.
Các Các bước bước: : mở mở tập tập tin, tin, thao thao tác tác tập tập tin, tin, đóng đóng tập tập tin tin.
Các Các thao thao tác tác trên trên tập tập tin: tin:
Đọc Đọc: : fscanf fscanf, , fgetc fgetc, , fgets fgets, , fread fread
Ghi Ghi: : fprintf fprintf, , fwrite fwrite
Xóa Xóa: remove : remove
Đổi Đổi tên tên/Di /Di chuyển chuyển: rename : rename
Trang 25Bài Bài tập tập 9.1: 9.1:
Viết
Viết chươngchương trìnhtrình C C tìmtìm sốsố nguyênnguyên tốtố nhưnhư sausau::
ĐọcĐọc vàovào 2 2 sốsố nguyênnguyên dươngdương M, N M, N từtừ file input.txt.file input.txt
XuấtXuất cáccác sốsố nguyênnguyên tốtố trongtrong đoạnđoạn [M, N] [M, N] vàovào file output.txt.file output.txt
Trang 26Bài Bài tập tập 9.2: 9.2:
Ma
Ma trậntrận M x N M x N đượcđược lưulưu trongtrong file matrix.txt file matrix.txt nhưnhư sausau::
DòngDòng đầuđầu tiêntiên chứachứa: M N (: M N (kíchkích thướcthước ma ma trậntrận).)
M M dòngdòng tiếptiếp theotheo, , dòngdòng ii (0 <= (0 <= ii <= M <= M –– 1) 1) chứachứa: a: ai1 ai2 B B aaiN(N
(N phầnphần tửtử thuộcthuộc dòngdòng ii củacủa ma ma trậntrận).)
Viết
Viết chươngchương trìnhtrình C C thaothao táctác ma ma trậntrận nhưnhư sausau::
Viết
Viết chươngchương trìnhtrình C C thaothao táctác ma ma trậntrận nhưnhư sausau::
NhậpNhập vàovào ma ma trậntrận M x N M x N từtừ file matrix.txt.file matrix.txt
XuấtXuất phầnphần tửtử cócó giágiá trịtrị bằngbằng tổngtổng cáccác phầnphần tửtửcòn
còn lạilại trongtrong ma ma trậntrận rara file result.txt.file result.txt
Trang 27Bài Bài tập tập 9.3: 9.3:
Viết
Viết chươngchương trìnhtrình C C nốinối 2 files 2 files nhưnhư sausau::
NhậpNhập vàovào đườngđường dẫndẫn file 1.file 1
NhậpNhập vàovào đườngđường dẫndẫn file 2.file 2
ThựcThực hiệnhiện nốinối nộinội dung file 2 dung file 2 vàovào cuốicuối file 1.file 1
Trang 28Bài Bài tập tập 9.4: 9.4:
Viết
Viết chươngchương trìnhtrình C C soạnsoạn thảothảo vănvăn bảnbản nhưnhư sausau::
NhậpNhập vàovào đườngđường dẫndẫn file file đểđể lưulưu vănvăn bảnbản
SoạnSoạn thảothảo vănvăn bảnbản từtừ bànbàn phímphím vàvà lưulưu vàovào file file vớivới đườngđường dẫndẫnđã
đã nhậpnhập ((kếtkết thúcthúc soạnsoạn thảothảo khikhi nhấnnhấn phímphím ESC).ESC)
Trang 29cách thứcthức mãmã hóahóa nhưnhư sausau::
ThốngThống nhấtnhất vớivới cáccác tướngtướng lĩnhlĩnh mộtmột sốsố nguyênnguyên K K đểđể làmlàm khóakhóa
KhiKhi viếtviết mậtmật lệnhlệnh, , mỗimỗi chữchữ cáicái gốcgốc (A (A –– Z) Z) sẽsẽ đượcđược dịchdịchchuyển
chuyển sang sang phảiphải mộtmột khoảngkhoảng K K đểđể trởtrở thànhthành chữchữ cáicái mãmã hóahóa
chuyểnchuyển sang sang phảiphải mộtmột khoảngkhoảng K K đểđể trởtrở thànhthành chữchữ cáicái mãmã hóahóa
ĐểĐể giảigiải mãmã, , mỗimỗi chữchữ cáicái mãmã hóahóa trongtrong mậtmật lệnhlệnh sẽsẽ đượcđược dịchdịchchuyển
chuyển ngượcngược lạilại sang sang tráitrái mộtmột khoảngkhoảng K K đểđể trởtrở vềvề chữchữ cáicái gốcgốc Hãy
Hãy viếtviết chươngchương trìnhtrình C C mãmã hóahóa vàvà giảigiải mãmã nhưnhư sausau::
a) a) TạoTạo file file mậtmật lệnhlệnh mãmã hóahóa từtừ mộtmột file file vănvăn bảnbản
b) b) GiảiGiải mãmã mộtmột file file mậtmật lệnhlệnh thànhthành file file vănvăn bảnbản