NHẬP/XUẤT KHÔNG ĐỊNH DẠNG VỚI READ(),GCOUNT() VÀ WRITE()

Một phần của tài liệu Giáo án - Bài giảng: TÀI LIỆU C++ (Trang 151 - 154)

Nhập/xuất không định dạng được thực hiện với các hàm thành viên istream::read() và

ostream::write().

Hàm istream::read():

istream& read(unsigned char* puch, int nCount); istream& read(signed char* psch, int nCount);

Trích các byte từ dịng cho đến khi giới hạn nCount đạt đến hoặc cho đến khi end- of-file đạt đến. Hàm này có ích cho dịng nhập nhị phân.

Hàm ostream::write():

ostream& write(const unsigned char* puch, int nCount); ostream& write(const signed char* psch, int nCount);

Chèn nCount byte vào từ vùng đệm (được trỏ bởi puch và psch) vào dòng. Nếu file được mở ở chế độ text, các ký tự CR có thể được chèn vào. Hàm này có ích cho dịng xuất nhị phân. Chẳng hạn:

152 cout.write(Buff,10);

Hàm istream::gcount():

int gcount();

Hàm trả về số ký tự đã trích bởi hàm nhập khơng định dạng cuối cùng.

VI. DÒNG NHẬP/ XUẤT FILE

Để thực thi xử lý file trong C++, các chương trình phải include tập tin <iostream.h> và <fstream.h>.

Header <fstream.h> gồm định nghĩa cho các lớp dòng ifstream cho nhập (đọc) từ một file, ofstream cho

xuất (ghi) tới một file) và fstream cho nhập/xuất (đọc/ghi) tới một file. Các file được mở bằng cách tạo các

đối tượng của các lớp dòng này. Cây phả hệ của các lớp này ở hình 8.2.

• Constructor của lớp ofstream:

(1) ofstream();

(2) ofstream(const char* szName,int nMode=ios::out,int nProt=filebuf::openprot); (3) ofstream(int fd);

(4) ofstream(filedesc fd, char* pch, int nLength); Trong đó: szName: Tên file được mở.

nMode: Một số nguyên chứa các bit mode định nghĩa là kiểu liệy kê của ios. Có thể kết hợp bằng tốn tử

|. Tham số này có thể một trong các giá trị sau:

Mode Ý nghĩa

ios::app Hàm di chuyển con trỏ file tới end-of-file. Khi các byte mới được ghi lên file,

chúng luôn luôn nối thêm vào cuối, ngay cả vị trí được di chuyển với hàm

ostream::seekp().

ios::ate Hàm di chuyển con trỏ file tới end-of-file. Khi byte mới đầu tiên được ghi lên file, chúng luôn luôn nối thêm vào cuối, nhưng khi các byte kế tiếp được ghi, chúng ghi

vào vị trí hiện hành.

ios::in Mở file để đọc.Với dòng ifstream, việc mở file đương nhiên được thực hiện ở chế

độ này. (adsbygoogle = window.adsbygoogle || []).push({});

ios::out Mở file để đọc.Với dòng ofstream, việc mở file đương nhiên được thực hiện ở

chế độ này.

ios::trunc Xóa file hiện có trên đĩa và tạo file mới cùng tên. Cũng có hiểu đây là chặt cụt file cũ, làm cho kích thước của nó bằng 0, chuẩn bị ghi nội dung mới. Mode này được áp dụng nếu ios::out được chỉ định và ios::app, ios::ate, và ios::in không được chỉ định.

ios::nocreate Nếu file không tồn tại thì thao tác mở thất bại.

ios::noreplace Nếu file tồn tại thì thao tác mở thất bại.

ios::binary Mở file ở chế độ nhị phân (mặc định là ở chế độ văn bản).

nProt: Đặc tả chế độ bảo vệ file. fd: Mã nhận diện file.

Giáo trình mơn Lập trình hướng đối tượng Trang 153

pch: Con trỏ trỏ tới vùng dành riêng chiều dài nLength. Giá trị NULL (hoặc nLength=0) dẫn đến dịng

khơng vùng đệm.

nLength: Chiều dài tính theo byte của vùng dành riêng (0=không vùng đệm).

Dạng (1) xây dựng một đối tượng ofstream mà không mở file. Dạng (2) xây dựng một đối tượng ofstream và mở file đã chỉ định.

Dạng (3) xây dựng một đối tượng ofstream và gắn (attach) với một file mở.

Dạng (4) xây dựng một đối tượng ofstream mà liên kết với đối tượng filebuf. Đối tượng filebuf được gắn tới file mở và vùng dành riêng.

• Constructor của lớp ifstream:

(1) ifstream();

(2) ifstream(const char* szName,int nMode=ios::in,int nProt=filebuf::openprot); (3) ifstream(int fd);

(4) ifstream(filedesc fd, char* pch, int nLength); Dạng (1) xây dựng một đối tượng ifstream mà không mở file. Dạng (2) xây dựng một đối tượng ifstream và mở file đã chỉ định.

Dạng (3) xây dựng một đối tượng ifstream và gắn (attach) với một file mở.

Dạng (4) xây dựng một đối tượng ofstream mà liên kết với đối tượng filebuf. Đối tượng filebuf được gắn tới file mở và vùng dành riêng.

• Constructor của lớp fstream:

(1) fstream();

(2) fstream(const char* szName,int nMode,int nProt=filebuf::openprot); (3) fstream(int fd);

(4) fstream(filedesc fd, char* pch, int nLength); Dạng (1) xây dựng một đối tượng fstream mà không mở file. Dạng (2) xây dựng một đối tượng fstream và mở file đã chỉ định.

Dạng (3) xây dựng một đối tượng fstream và gắn (attach) với một file mở.

Dạng (4) xây dựng một đối tượng ofstream mà liên kết với đối tượng filebuf. Đối tượng filebuf được gắn tới file mở và vùng dành riêng.

Nếu chúng ta sử dụng constructor ở dạng (1) thì chúng ta dùng hàm open() để mở file:

• Hàm ofstream::open():

void open(const char* szName,int nMode=ios::out,int nProt=filebuf::openprot);

Hàm ifstream::open(): (adsbygoogle = window.adsbygoogle || []).push({});

void open(const char* szName,int nMode=ios::in,int nProt=filebuf::openprot);

Hàm fstream::open():

void open(const char* szName,int nMode,int nProt=filebuf::openprot);

Để đóng file chúng ta dùng hàm close(), hàm này ở các lớp ifstream, ofstream, và fstream đều có

dạng:

154

Các hàm liên quan đến con trỏ file:

- Lớp istream: Hàm seekg(): (seek get)

(1) istream& seekg(streampos pos);

(2) istream& seekg(streamoff off,ios::seek_dir dir); Trong đó:

+ pos: Vị trí mới. streampos là tương đương typedef với long. + off: Giá trị offset mới. là tương đương typedef với long. + dir: hướng seek. Có một trong các trị sau:

ios::begin Seek từ bắt đầu của dòng.

ios::cur Seek tư øvị trí hiện hành của dịng

ios::end Seek từ cuối của dòng Hàm tellg(): (tell get)

streampos tellg();

Hàm trả về vị trí hiện hành của con trỏ file.

- Lớp ostream: Hàm seekp(): (seek put)

(1) ostream& seekp(streampos pos);

(2) ostream& seekp(streamoff off,ios::seek_dir dir); Hàm tellp(): (tell put)

streampos tellp();

Hàm trả về vị trí hiện hành của con trỏ file.

Một phần của tài liệu Giáo án - Bài giảng: TÀI LIỆU C++ (Trang 151 - 154)