Visual studio 2017 nem ír fájlba rendesen

Visual studio 2017 nem ír fájlba rendesen
2017-10-31T17:51:50+01:00
2017-10-31T18:00:37+01:00
2022-10-15T21:30:20+02:00
Vörös László
Sziasztok!
A múltkori problémám már megoldódott, most lett egy új.
Ismét ugyanazzal a feladattal kapcsolatos. Fájlba kell írni dobásokat. Meg van, hogy mi legyen a fájl neve, és miket kell beleírni. Ha 100 dobást kérek, nem ír bele semmit. Ha 1000-t, akkor már működik. De nem teljesen jól, mert nem írja bele mind az 1000 dobást, hanem mindig ugyanannyit de nem 1000-t. A fájl a StreamWriter  függvénnyel lett megnyitva. Ja és a dobások száma számlálós ciklusban van, és minden dobás után be kellene írnia a fájlba. Van a végén egy összegzés. Azt sem írja bele. A képernyőre kiír mindent jól. Mi lehet a megoldás? Sajnos kódot nem mellékelhetek, mivel versenyfeladat. Segítséget sem biztos, hogy szabadna kérnem, de ez általánosítva lett, és nem a konkrét kódot kérem. Így talán nem diszkvalifikálnak.
Mutasd a teljes hozzászólást!
Tipikusan az okozza, hogy nem zárod le a streamet, amibe írsz. A hatékonyság végett az nem úgy megy, hogy minden egyes Write() hívás után bevési a kért biteket a vinyóra (vagy átbillentgeti a biteket az SSD-n), hanem szépen gyűjti egy pufferbe a memóriában. Ha ez a puffer betelik, akkor már van elég adat, hogy értelme legyen a háttértárat macerálni vele, és akkor ténylegesen kiíródik. Ezen túl persze akkor is kiíródik, ha lezárod a streamet. Ha viszont elfelejted lezárni, akkor az adatok vége ott szomorkodik majd a pufferben, amíg a szemétgyűjtő össze nem szedi, de a lemezre ki soha nem kerül.

Nem vagyok .NET-es fejlesztő, de gondolom van valami Close() metódus, amit meghívhatsz, vagy még inkább a using blokk lesz a barátod, ami a lezárást "magától" megoldja.
Mutasd a teljes hozzászólást!

  • Mutasd a teljes hozzászólást!
  • Tipikusan az okozza, hogy nem zárod le a streamet, amibe írsz. A hatékonyság végett az nem úgy megy, hogy minden egyes Write() hívás után bevési a kért biteket a vinyóra (vagy átbillentgeti a biteket az SSD-n), hanem szépen gyűjti egy pufferbe a memóriában. Ha ez a puffer betelik, akkor már van elég adat, hogy értelme legyen a háttértárat macerálni vele, és akkor ténylegesen kiíródik. Ezen túl persze akkor is kiíródik, ha lezárod a streamet. Ha viszont elfelejted lezárni, akkor az adatok vége ott szomorkodik majd a pufferben, amíg a szemétgyűjtő össze nem szedi, de a lemezre ki soha nem kerül.

    Nem vagyok .NET-es fejlesztő, de gondolom van valami Close() metódus, amit meghívhatsz, vagy még inkább a using blokk lesz a barátod, ami a lezárást "magától" megoldja.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd