odczyt flag podanych przy otwarciu pliku(fstream)

0

Jaki jest najlepszy sposób na odczytanie flag podawanych przy otwarciu pliku za pomocą klasy fstream(ios::binary itd)?

1

rdstate jest najbardziej naturalnym rozwiązaniem.

0

aktualnie mam coś takiego:

class FOM final:public std::fstream::__filebuf_type
{
    int _getMode(void)
    {
        return _M_mode;
    }
public:
    static int getMode(std::fstream::__filebuf_type* buf)
    {
        return reinterpret_cast<FOM&>(*buf)._getMode();
    }
};

a potem:

FOM::getMode(file.rdbuf())
2

NIE NIE NIE
Nie ma rozsądnego powodu, by był jakikolwiek sens dziedziczyć po std::fstream! Nadużywanie dziedziczenia to najpowszechniejszy błąd w programowaniu oop.
Na dodatek ten reinterpret_cast, oraz używanie nie udokumentowanych typów i funkcji (po to są te podkreślenia, by stanowiły ostrzeżenie, że funkcja jest przeznaczona do użytku wewnętrznego biblioteki STL)!

Zacznij od początku i opisz jaką funkcjonalność chcesz zrealizować, bo ewidentnie zszedłeś na manowce, tak że nie wiadomo nawet po co.

0

chcę sprawdzić czy plik został otwarty w trybie binarnym, dostaję jako parametr funkcji fstream&

1

Po co ci ta wiedza?
Jak otwiera się strumień z góry wiadomo, czy będzie używany binarnie czy tekstowo i sama logika aplikacji nie powinna wymagać sprawdzenia jak był otwarty plik.

opatrzyłem do kodu STL (na clang na mac) i ta informacja jest zapisana w polu basic_filebuf (zawarte w basic_fstream), ale nie jest dostępna na zewnątrz.
Pod spodem jest użyte po prostu API C fopen z paramentem "b" lub bez.

Jak ci napisałem "Zacznij od początku i opisz jaką funkcjonalność chcesz zrealizować," to miałem na myśli coś w stylu: chcę wczytać plik bmp by zmienić go na czarno biały. Tymczasem ty nadal piszasz, jabyś chciał coś zrobić a nadal nie wiadomo po co chcesz to zrobić.
Takie coś nazywa się problemem XY i im szybciej nauczysz się go omijać tym lepiej.

0

Mam klasę która ma metodę save, która przyjmuję jako argument fstream& i zapisuje do niego informacje, ale musi je zapisywać inaczej gdy plik jest otwarty tekstowo(by dane były możliwe do odczytu przez człowieka po otwarciu pliku) lub binarnie(by zapisać je binarnie i zajmowały mniej miejsca)

1 użytkowników online, w tym zalogowanych: 0, gości: 1