Wpis z mikrobloga

Jezu, czemu chcesz wywołać manualnie Dispose() wewnątrz bloku using? I jak myślisz, co się stanie, jeśli nakażesz frameworkowi zwolnić wszelkie referencje etc. przed wywołaniem jakiejś innej metody na zwalnianym obiekcie?

Z innych pytań, co to za wersja frameworka i czy metoda Read() przyjmuje enuma określającego, w jakim celu otwierasz zipa (read, update etc.) To też ma znaczenie.
  • Odpowiedz
@TymRazemNieBedeBordo: skoro uzywasz bloku using() to znaczy, ze obiekt ten implementuje IDisposable i Dispose() zostanie wywolane przez framework, manualne wywolanie IDisposable nie ma tutaj w ogole zadnego sensu i nie powinno sie tak robic. Przylaczam sie do kolegi wyzej odnosnie sprawdzenia dodatkowych parametrow przy otwarciu pliku.
  • Odpowiedz
Jezu, czemu chcesz wywołać manualnie Dispose() wewnątrz bloku using? I jak myślisz, co się stanie, jeśli nakażesz frameworkowi zwolnić wszelkie referencje etc. przed wywołaniem jakiejś innej metody na zwalnianym obiekcie?


@Czesiowcy: zrobiłem to w akcie desperacji, by sprawdzić czy zwolni zasoby i wywali inny błąd gdy dojdzie do Save(). No i nie doszło. Z tego co rozumiem, powinien zwolnić plik przed tym i wywalić inny błąd, ale pewnie się mylę.
TymRazemNieBedeBordo - > Jezu, czemu chcesz wywołać manualnie Dispose() wewnątrz blok...

źródło: comment_fFowshIx4EKAiBCFZTktZkpmDDAE6BTE.jpg

Pobierz
  • Odpowiedz
@TymRazemNieBedeBordo: A czy metoda Read() pozwala w ogóle na takie mutowanie zawartości archiwum? Nie znam tej biblioteki, ale pobieżna lektura doka mówi mi, że ReadOptions() nie jest ekwiwalentem zwyczajowych enumów w metodach do pracy na plikach bezpośrednio z frameworka .NET. Masz jakiś przykład, gdzie ta biblioteka pozwala na takie zmiany w otwartym pliku, czy robi się to poprzez stworzenie kopii z pożądanymi zmianami?
  • Odpowiedz
@Czesiowcy: No te ReadOptions to zły trop. I w samym podręczniku jest takie samo użycie, plus używali dokładnie takiej metody na stacku. https://stackoverflow.com/questions/22339260/how-do-i-add-files-to-an-existing-zip-archive .
Odpocznę chwilę, pomyślę jak to obejść, ostatecznie wywalę wszystko do tymczasowego folderu i spakuje na nowo.
TymRazemNieBedeBordo - @Czesiowcy: No te ReadOptions to zły trop. I w samym podręczni...

źródło: comment_hhRk2xO511YDLyeAT4A8dNWbsHP4hY13.jpg

Pobierz
  • Odpowiedz
@TymRazemNieBedeBordo: Dispose(); dajesz tam, gdzie kończysz pracę z obiektem - nie możesz go dać przed Save();. using wywołuje metodę Dispose(); na końcu swojego kodu. Jeżeli nie użyjesz Dispose(); to obiekt dalej będzie trzymał otwarty plik.

Tzn. albo robisz z using, nie wywołujesz wtedy sam Dispose(); albo dajesz Dispose(); na końcu swojej metody AddToArchive(...);
  • Odpowiedz