odczyt flag podanych przy otwarciu pliku(fstream)

odczyt flag podanych przy otwarciu pliku(fstream)
NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

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

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
1

rdstate jest najbardziej naturalnym rozwiązaniem.

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

aktualnie mam coś takiego:

Kopiuj
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:

Kopiuj
FOM::getMode(file.rdbuf())
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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.

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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.

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
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)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.