Stránka 1 z 1

C# VS2015, čtení a zápis do souborů

Napsal: 10 čer 2016 12:22
od kimi999
Zdravím,

snažím se udělat v jednom kroku čtení a následný zápis (přepsání celého souboru). Bohužel program mi vrací chybu, že nelze do souboru nic zapsat, protože je používán jiný procesem. V kódu sice použiji příkaz na uzavření čtení, ovšem podle chyby tento příkaz buď není pro můj případ ten správný, nebo mám chybu jinde.

Soubor má příponu .dat jen pro efekt, jedná se o obyčejný textový soubor.

Kód: Vybrat vše

       umisteni = 10;
            hra = 0;
            celkovyCas = ((minuty * 6000) + vteriny * 10 + setiny );
            timerCas.Stop();

            string cestaVysledky = "C:/Bludiste/vysledky1.dat";
            NacteniVysledku[] vysl = new NacteniVysledku[5];
            StreamReader sr = new StreamReader(cestaVysledky);
            for (int i = 0; i < 5; i++)
            {
                int poradi = Convert.ToInt32(sr.ReadLine());
                string jmeno = sr.ReadLine();
                double vysledek = Convert.ToDouble(sr.ReadLine());
                vysl[i] = new NacteniVysledku(poradi, jmeno, vysledek);
                if (umisteni == 10)
                {
                    if (vysl[i].cas > celkovyCas)
                    {
                        umisteni = i;
                        delenaPozice = 0;
                    }
                    else if (vysl[i].cas < celkovyCas)
                    {
                    }
                    else
                    {
                        umisteni = i;
                        delenaPozice = 1;
                    }
                }
            }
            sr.Close();
            if (umisteni < 5)
            {
                int x = 4;
                do
                {
                    vysl[x].poradi = vysl[x].poradi;
                    vysl[x].jmeno = vysl[x - 1].jmeno;
                    vysl[x].cas = vysl[x - 1].cas;
                    x--;
                } while (umisteni < x);

                vysl[umisteni].poradi = umisteni + 1;
                vysl[umisteni].jmeno = prezdivka;
                vysl[umisteni].cas = celkovyCas;
                for (int i = 0; i < 5; i++)
                {
                    StreamWriter sw = new StreamWriter(cestaVysledky); // zde programu havaruje*
                    sw.WriteLine(vysl[i].poradi);
                    sw.WriteLine(vysl[i].jmeno);
                    sw.WriteLine(vysl[i].cas);
                }
            }
            else
            {
            }


*jedná se o tuto chybu: An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll
Additional information: Proces nemůže přistupovat k souboru C:\Bludiste\vysledky1.dat, protože soubor je využíván jiným procesem.

Díky za každou radu.

Re: C# VS2015, čtení a zápis do souborů

Napsal: 10 čer 2016 13:10
od Oxxid
https://msdn.microsoft.com/en-us//library/yh598w02.aspx

Kód: Vybrat vše

using (StreamWriter sw = new StreamWriter("file.txt"))
{
    sw.Write("Hello IO!");
}

string text;
using (StreamReader sr = new StreamReader("file.txt"))
{
    text = sr.ReadToEnd();
}

Re: C# VS2015, čtení a zápis do souborů

Napsal: 10 čer 2016 18:39
od kimi999
Nejspíš si nerozumíme, nejdříve potřebuji načíst data o 15 řádcích a uschovat je na chvíli v programu (funguje), data upravím dle výsledku a následně do stejného souboru zapsat nová data (v podstatě přepsat soubor). Zapisování dat mi za normálních okolností také funguje, ale když chci v jednom kroku použít obě možnosti, nefunguje to.

Re: C# VS2015, čtení a zápis do souborů

Napsal: 10 čer 2016 19:37
od lukas.sei

Re: C# VS2015, čtení a zápis do souborů

Napsal: 10 čer 2016 20:01
od satik
Řádek s

Kód: Vybrat vše

StreamWriter sw = new StreamWriter(cestaVysledky); // zde programu havaruje*

hoď před ten for cyklus a nezapomeň za ten for cyklus taky hodit

Kód: Vybrat vše

sw.Close();


Každý soubor musíš po otevření taky zavřít a momentálně se snažíš 5x otevřít ten soubor pro zápis aniž by jsi ho předtím někde zavřel.

Re: C# VS2015, čtení a zápis do souborů  Vyřešeno

Napsal: 10 čer 2016 22:17
od kimi999
Díky, teď to byla rada správným směrem :-)

takto už program pracuje správně.

Kód: Vybrat vše

StreamWriter sw = new StreamWriter(cestaVysledky);
                for (int i = 0; i < 5; i++)
                {
                    sw.WriteLine(vysl[i].poradi);
                    sw.WriteLine(vysl[i].jmeno);
                    sw.WriteLine(vysl[i].cas);
                }
                sw.Close();