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
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
).
- 1. Làm thế nào để không đồng bộ tuôn ra một tập tin ánh xạ bộ nhớ?
- 2. std :: fstream không tạo tập tin
- 3. Fstream không tạo được tập tin mới
- 4. Google App Engine: Làm thế nào để vô hiệu hóa bộ nhớ cache trên các tập tin 'tĩnh', hoặc làm cho bộ nhớ cache thông minh
- 5. hoạt động bộ nhớ qemu
- 6. Làm thế nào để kiểm tra hoạt động hệ thống tập tin
- 7. Bộ nhớ cache Gmap.net hoạt động như thế nào?
- 8. Bộ nhớ Cache ASP.NET hoạt động như thế nào?
- 9. Làm cách nào để ngăn các trình duyệt lưu trong bộ nhớ đệm tập tin CSS?
- 10. Bộ nhớ cache tập tin Python
- 11. Bộ nhớ Zend_Auth hoạt động như thế nào?
- 12. Làm thế nào để mô phỏng hoạt động giết người để bảo tồn bộ nhớ?
- 13. hiện con trỏ tập tin di chuyển fstream đọc/ghi
- 14. Làm thế nào để có được bộ mô tả tập tin của bộ đệm trong bộ nhớ?
- 15. Tập tin ánh xạ bộ nhớ .NET
- 16. tải .so tập tin từ bộ nhớ
- 17. Làm thế nào để sử dụng Boost :: Spirit :: Lex để lex một tập tin mà không cần đọc toàn bộ tập tin vào bộ nhớ đầu tiên?
- 18. Hết bộ nhớ khi mã hóa tập tin để base64
- 19. C - tạo tập tin trong bộ nhớ
- 20. Tập tin đọc Java vào bộ nhớ và cách không làm nổ bộ nhớ
- 21. RSpec: làm thế nào để kiểm tra các hoạt động tập tin và nội dung
- 22. Python tập tin hoạt động
- 23. fstream sẽ không tạo ra một tập tin
- 24. Làm thế nào để trả lại một fstream (C++ 0x)
- 25. Trong R, làm thế nào để âm mưu vào một bộ nhớ đệm thay vì một tập tin?
- 26. Làm thế nào để đo lường đáng tin cậy bộ nhớ có sẵn trong Linux?
- 27. tập tin âm thanh Streaming và bộ nhớ đệm nó
- 28. Linux Bộ nhớ ánh xạ tập tin dự trữ rất nhiều bộ nhớ vật lý
- 29. Làm thế nào để ngăn chặn NetBeans nhớ các tập tin đang mở?
- 30. Bộ nhớ và hoạt động :: OutOfMemory
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? –
Xem [std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline). – Casey
@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. –