Tải bản đầy đủ (.docx) (3 trang)

Chương 7 Các dòng tập tin (Stream) Nhập xuất nhị phân

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 (73.95 KB, 3 trang )

Nhập xuất nhị phân
15.1. Chọn kiểu nhập xuất nhị phân
Kiểu nhập xuất mặc định là văn bản. Để chọn kiểu nhập xuất nhị phân, thì trong tham số
mode (của hàm tạo dạng 2 và phương thức open) cần chứa giá trị:
ios::binary
Ví dụ muốn mở tệp “DSTS.DL” để đọc-ghi theo kiểu nhị phân và gắn tệp với dòng nhập-
xuất fs , ta dùng câu lệnh sau:
fstream fs(“DSTS.DL” , ios::in | ios::out | ios::binary) ;
15.2. Đọc, ghi ký tự
+ Để ghi một ký tự lên tệp có thể dùng phương thức:
ostream & put(char) ;
+ Để đọc một ký tự từ tệp có thể dùng phương thức:
istream & get(char &) ;
Cần chú ý rằng: Cách đọc ghi ký tự theo kiểu văn bản khác với cách đọc ghi ký tự theo
kiểu nhị phân (xem chương 10, cuốn Kỹ thuật lập trình C của tác giả)
Ví dụ để sao tệp có thể dùng thuật toán đơn giản sau:
+ Đọc một ký tự từ tệp nguồn
+ Nếu đọc thành công ( phương thức eof() = 0) thì ghi lên tệp đích và lại tiếp tục đọc ký tự
tiếp theo.
+ Nếu đọc không thành công ( phương thức eof() != 0) thì kết thúc.
Chú ý là phải dùng kiểu nhập xuất nhị phân thì thuật toán mới cho kết quả chính xác.
Chương trình sao tệp dưới đây viết theo thuật toán trên.
//CT7_15.CPP
// Sao tep
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
clrscr();


char tep_nguon[40], tep_dich[40] ;
char ch;
fstream fnguon, fdich;
cout << "\nTen tep nguon: " ; cin >> tep_nguon;
cout << "\nTen tep dich: " ; cin >> tep_dich;
fnguon.open(tep_nguon,ios::in | ios::binary);
fdich.open(tep_dich,ios::out | ios::binary);
if (fnguon.bad() || fdich.bad() )
428
{
cout << "\n Loi mo tep nguon hoac dich " ;
getch();
exit(1);
}
while(fnguon.get(ch),!fnguon.eof())
fdich.put(ch) ;
fnguon.close();
fdich.close();
cout << "\nHoan thanh" ;
getch();
}
15.3. Đọc, ghi một dẫy ký tự theo kiểu nhị phân
+ Phương thức:
ostream & write(char *buf, int n) ;
sẽ xuất n ký tự (byte) chứa trong buf ra dòng xuất.
+ Phương thức:
istream & read(char *buf, int n) ;
sẽ nhập n ký tự (byte) từ dòng nhập và chứa vào buf.
+ Phương thức
int gcount

cho biết số ký tự thực sự đọc được trong phương thức read.
Chú ý: Các phương thức write, read chỉ làm việc một cách chính xác trong kiểu nhập-xuất
nhị phân.
Dưới đây là chương trình sao tệp sử dụng các phương thức write, read và gcount.
//CT7_16.CPP
// Sao tep dung write, read va gcount
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
clrscr();
char tep_nguon[40], tep_dich[40] ;
char buf[5000];
int n;
fstream fnguon, fdich;
cout << "\nTen tep nguon: " ; cin >> tep_nguon;
cout << "\nTen tep dich: " ; cin >> tep_dich;
fnguon.open(tep_nguon,ios::in | ios::binary);
fdich.open(tep_dich,ios::out | ios::binary);
if (fnguon.bad() || fdich.bad() )
{
cout << "\n Loi mo tep nguon hoac dich " ;
getch();
exit(1);
}
while(fnguon.read(buf,5000),(n=fnguon.gcount()))
fdich.write(buf,n) ;
fnguon.close();

fdich.close();
cout << "\nHoan thanh" ;
getch();
}
430

×