Vào rat ệp nhị phân bằng read và write

Một phần của tài liệu Tài liệu NGÔN NGỮ LẬP TRÌNH C++ (Dùng cho sinh viên) docx (Trang 71 - 75)

Ghi vào tp nh phân bng write

Các bước thực hiện để ghi dữ liệu vào một tệp nhị phân như sau: 1. Mở tệp tin theo chếđộđể ghi nhị phân bằng đối tượng fstream:

fstream <Tên biến tệp>(<Tên tệp tin>, ios::out|ios::binary);

2. Ghi dữ liệu vào tệp bằng thao tác “write()”:

<Tên biến tệp>.write(char* <Dữ liệu>, int <Kích thước dữ liệu>);

3. Đóng tệp tin bằng lệnh close():

<Tên biến tệp>.close();

Trong đó, thao tác write nhận hai tham sốđầu vào như sau:

• Tham số thứ nhất là con trỏ kiểu char trỏđến vùng dữ liệu cần ghi vào tệp. Vì con trỏ bắt buộc có kiểu char nên khi muốn ghi dữ liệu có kiểu khác vào tệp, ta dùng hàm chuyển kiểu:

reinterpret_cast<char *>(<Dữ liệu>);

• Tham số thứ hai là kích cỡ dữ liệu được ghi vào tệp. Kích cỡ này được tính theo byte, nên thông thường ta dùng toán tử:

sizeof(<Kiểu dữ liệu>);

Lưu ý:

• Khi muốn đọc, ghi các dữ liệu có cấu trúc (struct) vào tệp thì ta phải dùng ở chế độ đọc/ghi tệp nhị phân mà không thể dùng chếđộđọc/ghi ở chếđộ văn bản.

• Khi đọc/ghi dữ liệu có kiểu cấu trúc, để toán tử sizeof() thực hiện chính xác thì các thành viên của cấu trúc không được là kiểu con trỏ. Vì toán tử sizeof() đối với con trỏ chỉ cho kích cỡ của con trỏ mà không cho kích cỡ thật của vùng dữ liệu mà con trỏ trỏ tới.

Chương trình 4.4 minh hoạ việc ghi dữ liệu vào tệp tin nhị phân, dữ liệu là kiểu cấu trúc: • Tên tệp tin và số lượng bản ghi được người dùng tự nhập vào từ bàn phím.

• Chương trình sẽ ghi vào tệp các bản ghi có cấu trúc do người dùng gõ vào từ bàn phím.

Chương trình 4.4 #include<stdlib.h> #include<iostream.h> #include<fstream.h> #include<conio.h> #include<type.h>

const int length = 25; // Độ dài tối đa tên tệp tin typedef struct {

int day; // Ngày int month; // Tháng

int year; // Năm } Date;

typedef struct {

char name[20]; // Tên nhân viên

Date birthDay; // Ngày sinh của nhân viên char role[20]; // Chức vụ của nhân viên float salary; // Lương của nhân viên } Employee;

void main(){

clrscr();

char fileName[length]; // Tên tệp tin cout << “Ten tep tin: ”;

cin >> setw(length) >> fileName; // Nhập tên tệp tin int recordNumber; // Số lượng bản ghi cout << “So luong ban ghi: ”;

cin >> recordNumber; // Nhập số lượng bản ghi /* Mở tệp tin */

// Khai báo và mở tệp tin

fstream fileOut(fileName, ios::out|ios::binary); (adsbygoogle = window.adsbygoogle || []).push({});

if(!fileOut){ // Không mở được tệp

cout << “Khong the tao duoc tep tin ” << fileName << endl; exit(1);

}

/* Ghi dữ liệu vào tệp tin */ Employee myEmployee;

for(int i=0; i<recordNumber; i++){

cout << “Ban ghi thu ” << i+1 << endl; cout << “Name: ”;

cin >> myEmployee.name; // Nhập tên nhân viên cout << “Day of birth: ”;

cin >> myEmployee.birthDay.day;// Nhập ngày sinh cout << “Month of birth: ”;

cin >> myEmployee.birthDay.month;// Nhập tháng sinh cout << “Year of birth: ”;

cin >> myEmployee.birthDay.year;// Nhập năm sinh cout << “Role: ”;

cin >> myEmployee.role; // Nhập chức vụ cout << “Salary: ”;

cin >> myEmployee.salary; // Nhập tiền lương // Ghi dữ liệu vào tệp fileOut.write(reinterpret_cast<char *>(&myEmployee), sizeof(Employee)); } /* Đóng tệp tin */ fileOut.close(); // Đóng tệp tin return; } Đọc d liu t tp nh phân bng read

Các bước thực hiện đểđọc dữ liệu từ một tệp tin nhị phân như sau:

1. Mở tệp tin theo chếđộđểđọc nhị phân bằng đối tượng fstream (mở tệp tin chỉđể ghi):

fstream <Tên biến tệp>(<Tên tệp tin>, ios::in|ios::binary);

2. Đọc dữ liệu từ tệp bằng thao tác “read()”:

<Tên biến tệp>.read(char* <Dữ liệu ra>, int <Kích thước dữ liệu>);

3. Đóng tệp tin bằng lệnh close():

<Tên biến tệp>.close();

Chương trình 4.5 minh hoạ việc đọc dữ liệu từ tệp tin vào biến có cấu trúc: • Tên tệp tin được người dùng tự nhập vào từ bàn phím.

• Chương trình sẽđọc các cấu trúc nhân viên trong tệp và hiển thị ra màn hình. • Chương trình dừng lại khi kết thúc tệp tin.

Chương trình 4.5 #include<stdlib.h> #include<iostream.h> #include<fstream.h> #include<conio.h> #include<type.h>

const int length = 25; // Độ dài tối đa tên tệp tin typedef struct {

int day; // Ngày int month; // Tháng int year; // Năm

typedef struct {

char name[20]; // Tên nhân viên

Date birthDay; // Ngày sinh của nhân viên char role[20]; // Chức vụ của nhân viên float salary; // Lương của nhân viên } Employee;

void main(){

clrscr();

char fileName[length]; // Tên tệp tin cout << “Ten tep tin: ”; (adsbygoogle = window.adsbygoogle || []).push({});

cin >> setw(length) >> fileName; // Nhập tên tệp tin /* Mở tệp tin */

// Khai báo và mở tệp tin

fstream fileIn(fileName, ios::in|ios::binary);

if(!fileIn){ // Không mở được tệp

cout << “Khong the mo duoc tep tin ” << fileName << endl; exit(1); } /* Đọc dữ liệu từ tệp tin ra màn hình */ Employee myEmployee; while(fileIn){ fileIn.read(reinterpret_cast<char *>(&myEmployee), sizeof(Employee)); // Đọc kí tự từ tệp tin cout << myEmployee.name << “ ” << myEmployee.birthDay.day << “/” << myEmployee.birthDay.month << “/” << myEmployee.birthDay.year << “ ” << myEmployee.role << “ ”

<< myEmployee.salary << endl; // Ghi kí tự ra màn hình }

/* Đóng tệp tin */

fileIn.close(); // Đóng tệp tin return;

Một phần của tài liệu Tài liệu NGÔN NGỮ LẬP TRÌNH C++ (Dùng cho sinh viên) docx (Trang 71 - 75)