odczyt flag podanych przy otwarciu pliku(fstream)

Odpowiedz Nowy wątek
2017-01-28 16:48

Rejestracja: 6 lat temu

Ostatnio: 5 miesięcy temu

Lokalizacja: Warszawa

0

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


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
To jest w ogóle coś więcej niż std::ios::rdstate()? - Althorion 2017-01-28 17:28
nie jestem pewien, ja to zrobiłem przez utworzenie klasy dziedziczącej po basic_filebuf i castowanie z filebuf na tą pochodną, a potem wyjmuję wartość, ale zastanawiam się czy można łatwiej - Niikelion 2017-01-28 17:30

Pozostało 580 znaków

2017-01-28 17:34

Rejestracja: 4 lata temu

Ostatnio: 4 godziny temu

1

rdstate jest najbardziej naturalnym rozwiązaniem.

Pozostało 580 znaków

2017-01-28 17:38

Rejestracja: 6 lat temu

Ostatnio: 5 miesięcy temu

Lokalizacja: Warszawa

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())

Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany

Pozostało 580 znaków

2017-01-29 19:37

Rejestracja: 12 lat temu

Ostatnio: 48 sekund temu

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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2017-01-29 19:47

Pozostało 580 znaków

2017-01-31 17:35

Rejestracja: 6 lat temu

Ostatnio: 5 miesięcy temu

Lokalizacja: Warszawa

0

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


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany

Pozostało 580 znaków

2017-02-01 19:57

Rejestracja: 12 lat temu

Ostatnio: 48 sekund temu

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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2017-02-04 12:20

Rejestracja: 6 lat temu

Ostatnio: 5 miesięcy temu

Lokalizacja: Warszawa

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)


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany

Pozostało 580 znaków

Odpowiedz

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