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

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Zamčeno
kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: 13 dub 2011 11:37

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

Příspěvek 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.
Oxxid
člen BSOD týmu
Příspěvky: 6194
Registrován: 07 pro 2012 19:16

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

Příspěvek 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();
}
kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: 13 dub 2011 11:37

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

Příspěvek 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.
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

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

Příspěvek 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.
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: 13 dub 2011 11:37

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

Příspěvek 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();
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Blokování stahovaných souborů
    od Riviera kid » » v Windows 11, 10, 8...
    10 Odpovědi
    7120 Zobrazení
    Poslední příspěvek od Riviera kid
  • Velikost souboru a složek na disku
    od L.L » » v Vše ostatní (sw)
    5 Odpovědi
    5966 Zobrazení
    Poslední příspěvek od L.L

Zpět na „Programování a tvorba webu“