2011-08-16 18 views
7

Trong mã của tôi, tôi đã chuyển một tham chiếu đến một iostream, trong trường hợp này cuối cùng là một tập tin.
Có cách nào để tìm hiểu xem, khi nó được mở ra, nó đã được thiết lập để [in | ra] không chỉ [in]?Tôi có thể hỏi iostream nếu nó có thể ghi được không?

+0

Nó thực sự là một 'iostream &'? Nếu vậy, nó kế thừa từ cả hai 'istream' và' ostream', và, do đó, có thể ghi được. Nếu bạn đang tham chiếu đến lớp cơ sở, 'ios', thì bạn đang xem xét sử dụng các hàm RTTI hoặc templated. –

+3

std :: fstream f ("/ work/file.txt", std :: ios_base :: in); - f thừa hưởng ostream nhưng không thể ghi. –

+0

Nhưng tại sao bạn làm điều đó, ngoại trừ những người làm phiền muốn tìm hiểu xem họ có thể ghi vào tập tin không? – UncleBens

Trả lời

3

Sau khi xem xét tất cả các thành viên của IOS, iostream, ostream, tôi không thấy bất cứ cách nào để lấy openmode cờ sử dụng. Tôi đoán bạn sẽ phải cố gắng viết một cái gì đó để tham khảo của bạn và bắt bất kỳ lỗi nào nó ném. Hoặc tùy thuộc vào cách nó được thiết lập, kiểm tra kết quả của bad().

-2

... loại

if (dynamic_cast<ostream*>(MyStreamPtr) == 0) 
{ 
    // Not for output... 
} 
1

openmode được chuyển xuống std::streambuf, nhưng không có phương pháp để truy xuất. Cách duy nhất để biết liệu tệp có mở để ghi các hoạt động đang cố gắng viết và kiểm tra cho f.fail() hoặc tùy chọn f.bad() (tương đương với f.rdstate() & std::fstream::badbit).

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