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ć?
7
A
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
).
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. –
std :: fstream f ("/ work/file.txt", std :: ios_base :: in); - f dziedziczy ostream, ale nie jest zapisywalny. –
Ale dlaczego miałbyś to robić, z wyjątkiem irytujących ludzi, którzy chcą dowiedzieć się, czy mogą pisać do pliku? – UncleBens