2013-06-10 23 views
7

Tôi không tìm thấy câu trả lời rõ ràng cho một khía cạnh của đối tượng fstream cần thiết để xác định xem nó có đáng sử dụng hay không. fstream lưu trữ nội dung của nó trong bộ nhớ hay nó giống con trỏ đến vị trí trong tệp? Ban đầu tôi đã sử dụng CFile và đọc văn bản thành CString, nhưng tôi không muốn có toàn bộ tệp trong bộ nhớ nếu tôi có thể tránh được.Làm thế nào để fstream hoạt động? Bộ nhớ hoặc tập tin?

Trả lời

5

fstream viết tắt là file stream - thường là kết nối với tệp trong hệ thống tệp của hệ điều hành lưu trữ. (§27.9.1.1/1: "Lớp basic_filebuf<charT,traits> liên kết cả chuỗi đầu vào và chuỗi đầu ra với một tệp.")

Nó (thường) đệm một số thông tin từ tệp đó và nếu bạn tình cờ làm việc với một tệp nhỏ, tất cả có thể xảy ra để phù hợp với bộ đệm. Tuy nhiên, trong một trường hợp điển hình, hầu hết dữ liệu sẽ nằm trong một tệp trên đĩa (hoặc ít nhất là trong bộ đệm tệp của hệ điều hành) với một phần tương đối nhỏ của nó (thường là một vài kilobyte) trong bộ đệm của fstream.

Nếu bạn đã muốn sử dụng một bộ đệm trong bộ nhớ và có nó hành động như một tập tin, bạn sẽ thường sử dụng một std::stringstream (hoặc một biến thể như std::istringstream hoặc std::ostringstream).

+0

Vì vậy, 'stringstream' sẽ thích hợp hơn để xử lý tệp văn bản thực sự lớn mà tôi muốn phân tích cú pháp từng dòng? –

+0

Xem [std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline). – Casey

+1

@JoeMajsterski: không, có thể là không. Một stringstream thường được sử dụng như một bộ đệm tạm thời (ví dụ) dữ liệu định dạng trước khi hiển thị, hoặc để đọc một dòng tại một thời điểm từ tập tin, sau đó sử dụng 'stringstream' để phân tích các phần ra khỏi dòng. –

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