2009-12-20 32 views
14

Làm thế nào để bạn nhận được bao nhiêu byte được đọc với hàm ifstream :: read?ifstream, bytes được đọc?

Giả sử là tệp là 10 byte và cửa sổ cho biết đó là 10 byte nhưng chỉ có 8 byte trong tệp nên khi tôi đọc nó, nó chỉ đọc 8 byte vì vậy tôi kết thúc với quá lớn Một bộ đệm.

+1

Bạn có chắc chắn rằng bạn không có dòng mới ở cuối tệp (ví dụ: '\ r \ n' trên Windows) không? Điều đó sẽ cho bạn thiếu hai byte. –

+0

Có, đã thử nó với fopen, vv và nó trở lại chỉ đọc 8 byte. – user230821

Trả lời

34

Bạn có thể tìm hiểu bằng cách gọi gcount() trên luồng ngay sau khi bạn đọc.

ifs.read(buf, sizeof buf); 
std::streamsize bytes = ifs.gcount(); 
2

Có một chức năng gọi là readsome(...) mà những gì bạn muốn:

streamsize readsome (char* s, streamsize n); 

Return Value Số lượng ký tự trích xuất.

+6

'readome' chỉ đọc từ bộ nhớ đệm được liên kết với luồng, nó sẽ không nhất thiết phải đọc đến cuối tệp ngay cả khi tệp đủ lớn. Bạn không muốn sử dụng nó ngoại trừ trong những trường hợp rất hạn chế. – interjay

Các vấn đề liên quan