Hirdetés

Keresés

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

  • joysefke

    veterán

    válasz fatal` #8008 üzenetére

    Uhh :U

    https://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.flush(v=vs.110).aspx

    DeflateStream.Flush Method ()

    The current implementation of this method does not flush the internal buffer. The internal buffer is flushed when the object is disposed.

    GZipStream.Flush() ugyanez...

    Mondjuk továbbra sem értem, miért elegendő, ha a ToArray() a StreamWriter blokkján kívül, de a GZipStream blokkján belül van. Azt várnám, hogy ahogy Te tanácsoltad, a GZipStream blokkja után kellene hogy legyen, hogy biztonságos legyen meghívni a ToArray-t. (mert ekkor a GZipStream is Dispose-olva és ezáltal a bufferje is ürítve lett)

  • joysefke

    veterán

    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...

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