30/09/2018, 16:53

Fstream operator<< và write khác nhau chỗ nào?

Khi sử dụng thế này

file.open("data.bin", ios::binary | ios::out);

string temp = "test string";

file << temp;

thì khi mở file ra thì giống như mở một tập file văn bản không ?

Ví dụ 2 :

file.open("data.bin", ios::binary | ios::out);

string temp = "test string";
file.write(temp.c_str(), temp.length());

thì 2 kiểu này khác nhau như thế nào ?

Nguyễn Minh Dũng viết 18:54 ngày 30/09/2018

Trong trường hợp ví dụ ở trên thì giống nhau.

Operator<< nhận vào nhiều kiểu dữ liệu khác nhau. Vì đây là overload operator nên ta có thể đẩy vào nhiều thứ. Chi tiếtcủa nó có thể xem ở đây

Ngược lại write chỉ hỗ trợ chèn vào kiểu const char * mà thôi. Đó là lý do tại sao phải viết temp.c_str(). Chi tiết của nó có thể xem ở đây

Evil viết 19:06 ngày 30/09/2018

Có một điều em thấy lạ là khi mở file tạo bởi ví dụ 1 thì phần mềm mở dạng text như bình thường
. Còn ở ví dụ 2 thì mở file ra ở dạng hex.

Ví dụ:


Nguyễn Minh Dũng viết 19:00 ngày 30/09/2018

Em nói đúng rồi, đó là bởi vì hàm write đơn thuần là hàm copy một cục dữ liệu vào file. Nên dữ liệu ghi vào là dữ liệu thô.

Inserts the first n characters of the array pointed by s into the stream.

This function simply copies a block of data, without checking its contents: The array may contain null characters, which are also copied without stopping the copying process.

Đối với operator<< thì dữ liệu có định dạng


Hướng dẫn post bài: Đối với ảnh, em chỉ cần post link là tự hiện ra ảnh thôi à.

Evil viết 18:58 ngày 30/09/2018

Em hiểu thêm rất nhiều rồi ạ

Bài liên quan
0