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 đủ
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:
bai_giang_lap_trinh_nang_cao_bai_12_docghi_tren_luong_va_tep.pdf

