2011-08-16 8 views
7

W moim kodzie przekazano mi odniesienie do iostream, że w tym przypadku jest to ostatecznie plik.
Czy istnieje sposób sprawdzenia, czy po otwarciu został ustawiony na [w | na wyjściu] nie tylko [w]?Czy mogę poprosić o kod Iostream, jeśli można go zapisać?

+0

Czy to rzeczywiście "iostream &"? Jeśli tak, dziedziczy on po obu 'istream' i' ostream', i dlatego jest zapisywalny. Jeśli bierzesz odwołanie do klasy bazowej, 'ios', to patrzysz na albo używając RTTI albo funkcji szablonowych. –

+3

std :: fstream f ("/ work/file.txt", std :: ios_base :: in); - f dziedziczy ostream, ale nie jest zapisywalny. –

+0

Ale dlaczego miałbyś to robić, z wyjątkiem irytujących ludzi, którzy chcą dowiedzieć się, czy mogą pisać do pliku? – UncleBens

Odpowiedz

3

Po obejrzeniu wszystkich członków IOS, iostream, ostream, ja nie widzę żadnego sposobu, aby odzyskać flagę openmode używany. Sądzę, że będziesz musiał spróbować napisać coś do swojego odnośnika i złapać każdy błąd, który rzuca. Lub w zależności od tego, jak jest ustawiony, sprawdź wynik złego().

-2

... rodzaj

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

Numer openmode jest przekazywany do std::streambuf, ale nie ma metod jego odzyskania. Jedynym sposobem sprawdzenia, czy plik jest otwarty dla operacji zapisu, jest próba zapisu i sprawdzenia dla f.fail() lub opcjonalnie f.bad() (odpowiednik f.rdstate() & std::fstream::badbit).

Powiązane problemy