Bài giảng Lập trình nâng cao - Bài 12: Đọc/ghi trên luồng và tệp - Hoàng Thị Điệp

Bài 12: Đọc/ghi trên  
luồng và tệp  
Giảng viên: Hoàng Thị Điệp  
Khoa Cô ng nghệ Thô ng tin – ĐH Cô ng Nghệ  
Thuật ngữ  
• stream: dò ng tin / dò ng / luồng  
• input stream: luồng nhập  
• output stream: luồng xuất  
• standard input stream: luồng nhập chuẩn == bàn phím  
• standard output stream: luồng xuất chuẩn == màn hình  
• file: tệp  
• text file: tệp văn bản  
• binary file: tệp nhị phân  
DTH  
INT2202  
Chapter 12  
Streams  
and File I/O  
Copyright © 2010 Pearson Addison-Wesley.  
All rights reserved  
Mục tiêu bài học  
• Đọc/ghi trên luồng  
– Đọc/ghi trên tệp  
– Đọc/ghi kí tự  
• Cô ng cụ đọc/ghi trên luồng  
– Tên tệp là input  
– Định dạng kết quả xuất, thiết đặt cờ  
• Phâ n cấp luồng  
– Sơ lược về khái niệm thừa kế  
• Phương thức truy cập ngẫu nhiên trên tệp  
DTH  
INT2202  
Giới thiệu  
• Luồng  
– Các đối tượng đặc biệt  
– Chuyển phát input và output của chương trình  
• Đọc/ghi trên tệp  
– Sử dụng khái niệm thừa kế  
• Giới thiệu ở chương 14 giáo trình  
– Đọc/ghi trên tệp rất hữu ích  
• Được giới thiệu ở bài này  
DTH  
INT2202  
Luồng  
• Một dòng chảy kí tự  
• Luồng nhập  
– Cá c kí tự chảy vào chương trình  
• Có thể xuất phát từ bàn phím  
• Có thể xuất phát từ tệp  
• Luồng xuất  
– Cá c kí tự chảy từ chương trình ra  
• Có thể hướng tới màn hình  
• Có thể hướng tới tệp  
DTH  
INT2202  
Sử dụng luồng  
• Ta đ ã sử dụng luồng ở các bài trước  
– cin  
• Đối tượng luồng nhập kết nối với bàn phím  
– cout  
• Đối tượng luồng xuất kết nối với màn hình  
• Có thể định nghĩa các luồng khác  
– Hướng tới hoặc xuất phát từ tệp  
– Dùng tương tự như cin, cout  
DTH  
INT2202  
Sử dụng luồng giống cách dùng cin, cout  
• Xé t ví dụ:  
– Một chương trình định nghĩa đối tượng inStream  
xuất phát từ tệp nào đó:  
int theNumber;  
inStream >> theNumber;  
• Đọc giá trị từ luồng, gán cho biến theNumber  
– Chương trì nh này cũng định nghĩa đối tượng outStream hướng  
tới tệp nào đó  
outStream << "theNumber is " << theNumber;  
• Ghi giá trị vào luồng, từ đó sẽ đi vào tệp  
DTH  
INT2202  
Tệp  
• Ta s ẽ bàn về các thao tác trên tệp văn bản  
• Đọc từ tệp  
– Khi chương trì nh lấy input  
• Viết vào tệp  
– Khi chương trì nh truyền output ra  
• Bắt đầu từ đầu tệp tới cuối tệp  
– C++ có những phương thức đọc/ghi khác  
– Nhưng ở đây ta chỉ bàn về những phương thức đơn giản trên  
tệp văn bản  
DTH  
INT2202  
Kết nối với tệp  
• Trước tiên phải kết nối tệp và đối tượng luồng  
• Để đọc:  
– Tệp đối tượng ifstream  
• Để ghi:  
– Tệp đối tượng ofstream  
• Lớp ifstream và lớp ofstream  
– Định nghĩa trong thư viện <fstream>  
– Đặt tên trong không gian tên std  
DTH  
INT2202  
Thư viện đọc/ghi tệp  
• Để cho phép cả đọc tệp và ghi tệp trong chương trình:  
#include <fstream>  
using namespace std;  
hoặc  
#include <fstream>  
using std::ifstream;  
using std::ofstream;  
DTH  
INT2202  
Khai bá o luồng  
• Phải ikfhsatirbeáaomluồinngSnhtrưetaamlàm; với tất cả các biến class khác:  
ofstream outStream;  
• Sau đó phải kết nối nó với tệp:  
inStream.open("infile.txt");  
– Gọi là mở tệp  
– Dùng hàm thành viên open  
– Có thể dùng đường dẫn đầy đủ  
DTH  
INT2202  
Sử dụng luồng  
• Sau khi khai bá o ta có thể sử dụng nó  
int oneNumber, anotherNumber;  
inStream >> oneNumber >> anotherNumber;  
• Tương tự với luồng xuất:  
ofstream outStream;  
outStream.open("outfile.txt");  
outStream  
<< "oneNumber = " << oneNumber  
<< " anotherNumber = "  
<< anotherNumber;  
– Truyền các mẩu dữ liệu tới tệp output  
DTH  
INT2202  
Tên tệp  
• Chương trì nh và tệp  
• Tệp có 2 tên trong chương trình của ta  
– Tên tệp ngoài  
• Cò n gọi là tên tệp vật lý  
• Ví dụ "infile.txt"  
• Đôi khi được gọi là tên tệp thực sự  
• Chỉ dùng 1 lần duy nhất trong chương trình (để mở tệp)  
– Tên luồng  
• Cò n gọi là tên tệp logic  
• Chương trì nh dùng tên này cho tất cả các hoạt động trên tệp  
DTH  
INT2202  
Đóng tệp  
• Nên đóng tệp  
– khi chương trì nh hoàn thành đọc dữ liệu từ tệp hoặc  
ghi dữ liệu ra tệp  
– Lệnh đóng tệp sẽ ngắt kết nối giữa luồng và tệp  
– Đóng tệp cho ví dụ trước:  
inStream.close();  
outStream.close();  
• Không đối số  
• Tệp tự động đóng khi chương trình kết thúc  
DTH  
INT2202  
flush cho tệp  
• Dữ liệu xuất thường được "buffered"  
– Lưu lại tạm thời trước khi ghi vào tệp  
– Ghi theo nhó m  
• Đôi khi cần ép ghi:  
outStream.flush();  
– Hàm thành viên flush có thể áp dụng cho tất cả các luồng xuất  
– Dữ liệu xuất bị buffered sẽ được ghi thực sự  
• Lệnh đóng tệp sẽ tự động gọi tới flush()  
DTH  
INT2202  
Ví dụ tệp:  
Display 12.1 Đọc/ghi đơn giản trên tệp (1/2)  
DTH  
INT2202  
Ví dụ tệp:  
Display 12.1 Đọc/ghi đơn giản trên tệp (2/2)  
DTH  
INT2202  
Nối vào một tệp  
• Thao tá c mở tệp chuẩn bắt đầu với tệp rỗng  
– Nếu tệp có dữ liệu trước khi mở thì toàn bộ dữ liệu sẽ bị xóa  
• Mở để ghi nối:  
ofstream outStream;  
outStream.open("important.txt", ios::app);  
– Nếu tệp không tồn tại tạo tệp  
– Nếu tệp tồn tại ghi nối vào cuối tệp  
– Đối số thứ 2 là hằng định nghĩa sẵn cho lớp ios  
• Trong thư viện <iostream>, không gian tên std  
DTH  
INT2202  
Cú pháp khác để mở tệp  
• Có thể chỉ định tên tệp khi khai báo  
– Truyền đối số (là tên tệp) cho hàm kiến tạo  
• ifstream inStream;  
inStream.open("infile.txt");  
tương đương với:  
ifstream inStream("infile.txt");  
DTH  
INT2202  
Tải về để xem bản đầy đủ
pdf 47 trang myanh 18540 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình nâng cao - Bài 12: Đọc/ghi trên luồng và tệp - Hoàng Thị Điệp", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_nang_cao_bai_12_docghi_tren_luong_va_tep.pdf