Eljárásban file kiírás C#

Eljárásban file kiírás C#
2021-03-24T23:13:22+01:00
2021-03-25T15:28:36+01:00
2022-12-06T18:30:41+01:00
Bloodlord
Sziasztok!

Segítséget szeretnék kérni: egy console programot írok, amiben a program során több esetben kell adatokat lementenem txt file-ba. Mivel elég sokszor kellene ezt a műveletet elvégezni, ezért úgy gondoltam, hogy nem a main függvényen belül végezném el minden egyes alkalommal leírva, hanem egy procedura-ba raknám bele, amelyet meghívnék. Csak ez a részlet valahogy így nézne ki:
Mivel minden egyes alkalommal két tömb (más.-más tömbök, de a típusok ugyanaz) értékeit kell írni, ezért valami ilyesmire gondoltam: A tömb elemein végig megyek egy számláló ciklussal. 

Main-ben: 
StreamWriter iro = new StreamWriter(fajlnev);
{
for (int i = 0; i < Behiv.db; i++)
            {
             

                Megir( iro, Behiv.rendszamok, arra);
            }
iro.Close();

}

 private static void Megir(string x, string rns, string y)
        {

            x.WriteLine("  {0}   {1}", rns, y);        
 }
Azonban sajnos nem működik, mert az x-et nem tudja értelmezni. Ha pedig az egész 
StreamWriter iro = new StreamWriter(fajlnev);
iro.Close(); részt leviszem a Megir procedurába, akkor meg minden sornál felülírja az előző file-t, és a végén csak az utolsó elemek lesznek a tömbökből a kiírt file-ban. Hogyan lehetne a komplett tömböket kiírni txt file-ba, úgy, hogy a kód több részéből meghívható legyen? 
Köszönöm a segítséget.
Mutasd a teljes hozzászólást!
Üdv.

Ha így akarnád használni, akkor a Megir metódusban az első paraméter típusának StreamWriter-nek kellene lennie, nem string-nek.

Tehát:

private static void Megir(StreamWriter x, string rns, string y) {...}
Így már működne, de még felülírná a fájlodat. Ahhoz, hogy ne írja felül, a StreamWriter osztálynak egy másik konstruktorára lesz szükséged, erre:

StreamWriter(string path, bool append)
A második paraméter true legyen, ekkor a hozzáfűzés (append) be lesz kapcsolva.
Így:

StreamWriter iro = new StreamWriter(fajlnev, true);
(Egyébként a Main metódusban a StreamWriter utáni és a Close utáni kapcsos zárójelpár fölösleges.)

De elegánsabb, ha az egész StreamWriter benne lenne a Megir metódusban, és használhatnád a using blokkot, ekkor a Close-zal sem kell foglalkoznod. A fájlnevet pedig átadhatod paraméterként a Main-ből a Megir-nak.

static void Main(string[] args) { for (int i = 0; i < Behiv.db; i++) { Megir(fajlnev, Behiv.rendszamok, arra); } } private static void Megir(string fajlnev, string rns, string y) { using (StreamWriter x = new StreamWriter(fajlnev, true)) { x.WriteLine(" {0} {1}", rns, y); } }
Mutasd a teljes hozzászólást!

  • Nagyon szépen köszönöm a segítséget, tökéletesen úgy működik, ahogy szerettem volna. Köszönöm
    Mutasd a teljes hozzászólást!
  • Szívesen.

    Egyébként talán erőforrás-kímélőbb az eredeti módszer, hogy kívül van a StreamWriter létrehozása (tehát a Main-ben), és őt csak átadod a Megir-nak.

    Mert jelenleg minden Megir híváskor létrejön, majd megszűnik a StreamWriter objektum.

    Main:

    StreamWriter x = new StreamWriter(fajlnev, true); for (int i = 0; i < Behiv.db; i++) { Megir(x, Behiv.rendszamok, arra); } x.Close();
    Megir:

    private static void Megir(StreamWriter x, string rns, string y) { x.WriteLine(" {0} {1}", rns, y); }
    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