Új hozzászólás Aktív témák

  • joysefke

    veterán

    LOGOUT blog

    válasz fatal` #8008 üzenetére

    Köszi!

    1,
    Nem a zárójelek javították meg, hanem az hogy a GZipStream using blokkon kívülre került a ToArray hívás

    Vak vagyok :)
    Próbálgattam a dolgot, és elegendő volt a ToArray() hívást a StreamWriter- using blokkján kívülre rakni, már az is megjavította (úgy hogy a GZipStream using blokkján még belül volt ) (!!!)
    Tehát abban igazad van, hogy ki kellett lépni valamelyik using blokkból.

    2,
    A flush pedig nem szükséges (mivel a végén van nem okoz problémát, csak kétszer hívódik), mert a Dispose során a Framework meghívja mindenképpen.

    OK, ezt értem, de azt nem értem, hogy az én megoldásom miért nem jó, tehát, ha még a legbelső (StreamWriter) using blokkon belül akarom a ToArray()-t megívni backing streamen (MemoryStream), akkor miért nem működik az, hogy szépen visszafele meghívom a Flush()-öket: sw.Flush(); ds.Flush(); ms.Flush(); aztán meghívom a MemoryStreamen a ToArray()-t.

    Itt azt várnám, hogy a Flush() hívások után a a MemoryStream mindent tartalmaz amit beleírtam (kiürültek a bufferek), tehát bátran hívhatok ToArray()-t...
    Itt ugye asszinkronitás sincsen, tehát abban a pillanatban amikor meghívom a Flush()-t, akkor már minden írás amit előtte kiadtam már megtörtént (bufferbe)

    És ez működik is úgy, hogy nincsen tömörítés (DeflateStream vagy GZipStream) hanem csak Streamwriter( MemoryStream()) van. Onnantól kezdve, hogy közé ékelek egy GZipStreamet vagy DeflateStream-et, borul az egész...

    [ Szerkesztve ]

Új hozzászólás Aktív témák