Błąd dostępu do bliku.

0

Cześć.
Dopiero zaczynam przygodę i zawsze staram się najpierw znaleźć rozwiązanie w internecie. Niestety poległem na niemożliwości edycji i zapisu pliku tekstowego. Gdy zapiszę plik jako konfiguracja3.txt wszystko działa, lecz chciałbym by plik konfiguracja1.txt nadpisać. Domyślam się że streamreader blokuje zapis tak?


        private void button2_Click(object sender, EventArgs e)
        {
            StreamReader sr = new StreamReader(Application.StartupPath + "/" + "Konfiguracja1.txt");
            
            string[] lines = File.ReadAllLines(Application.StartupPath + "/" + "Konfiguracja1.txt");
            lines[1] = textBox1.Text;
            
            File.WriteAllLines(Application.StartupPath + "/" + "Konfiguracja1.txt", lines);

        }

Oto komunikat błędu:

System.IO.IOException: „The process cannot access the file 'C:\Users\bboyl\Desktop\Aplikacja 1\Aplikacja 1\bin\Debug\netcoreapp3.1\Konfiguracja1.txt' because it is being used by another process.”

1

Masz otwarty stream do odczytu tego pliku przez StreamReader, na dodatek chcesz otworzyć po raz drugi ten sam plik do odczytu w linijce 6, a w międzyczasie próbujesz jeszcze otworzyć ten plik do zapisu

Ta linijka nie jest w ogóle Ci potrzebna, więc ją wyrzuć.

StreamReader sr = new StreamReader(Application.StartupPath + "/" + "Konfiguracja1.txt");
0

Dzięki! Myślałem że coś źle napisałem i szukałem innego rozwiązania, a tu wystarczyło usunąć jedną linię... Jeszcze jedno pytanie - być może uda się zaoszczędzić dobre 2h w google - jak napisać ifa żeby wyświetlił messagebox z returnem gdy plik nie zostanie znaleziony oraz np. przez przypadek zedytuję plik konfiguracyjny tak, że linia którą chciałbym zmienić klikając przycisk button2 nie istniałaby?

1

jak napisać ifa żeby wyświetlił messagebox z returnem gdy plik nie zostanie znalezion

https://docs.microsoft.com/en-us/dotnet/api/system.io.file.exists?view=net-5.0

if(!File.Exists(pathToFile))
{
   //wyświetl message box
}

Lub łapiesz wyjątek FileNotFoundException https://docs.microsoft.com/en-us/dotnet/api/system.io.filenotfoundexception?view=net-5.0
podczas wywołania File.ReadAllLines

przez przypadek zedytuję plik konfiguracyjny tak, że linia którą chciałbym zmienić klikając przycisk button2 nie istniałaby?

string[] lines = File.ReadAllLines(pathToFile);

if(lines.Length < 2) //bo odczytujesz z element z indeksu 1, czyli 2 element tablicy
{
   //wyświetl message box
}
0
bboylubsko napisał(a):

Jeszcze jedno pytanie - być może uda się zaoszczędzić dobre 2h w google - jak napisać ifa żeby wyświetlił messagebox z ...

Tu nie chodzi o google, a o przetwarzanie informacji w głowie.
Moim zdaniem nawet początkujący powinien przeczytać treść podanego wyjątku, i powinna dać do myślenia.

A pytanie o if'a do messageboxa to już kuriozum.
Tak, to NIGDY niczego nie osiągniesz w programowaniu - to PRZEDE WSZYSTKIM szukanie informacji i jej zestawianie, od elementu do ogółu (i na odwrót)

PS. Powiem Ci z sekretów zawodowych. Do znajdywania kawałków kodu w googlu tzreba być znacznie lepszym, niż gdyby pisać to samemu.
Trzeba obcy kod zrozumieć, złapać kontekst i **ocenić **(bo może być od ludzi słabszych od siebie)

0

Tak, to NIGDY niczego nie osiągniesz w programowaniu - to PRZEDE WSZYSTKIM szukanie informacji i jej zestawianie, od elementu do ogółu (i na odwrót)

A czy ty kiedykolwiek pomogłeś komuś na forum, zamiast narzekać na kod początkującego, krytykować i się wymądrzać?

Nie napisze od razu oprogramowania klasy enterprise, zaczyna od podstaw, czyli ifów, będzie musiał 20 razy tak zrobić, to sam się nauczy, że to donikąd nie prowadzi.
Przecież nie będzie tutaj jechał jak wyjadacz, jak widać, że nie zna podstaw.

0

W sumie ciekawy temat na dyskusję. Choć czuję się atakowany :). Nie dajmy się zwariować, dla mnie póki co pisanie programu jest jak łączenie puzzli. Środowisko mam od 3 dni. Szukałbym po prostu w google podobnych pytań i ich rozwiązań i ewentualnie pod moje potrzeby dostosował. Ja wiem co chcę zrobić - chodzi mi o to jak to przetłumaczyć żeby rozumiał to kompilator. Jeśli zobaczę, że coś działa w ten sposób, coś innego w inny to będę mógł później edytować kod pod inną potrzebę.

Właśnie takim szukaniem w google udało się napisać taki program:
2021-02-07_193414.png

Obsługiwałem wyjątki takie jak wartość null lub inne niż cyfra i przecinek w polach tekstowych lub wielokrotne przecinki. Spokojnie nie będę mistrzem w dwa tygodnie.

Teraz wiem jak wygląda składnia obsługi wyjątku braku linii i mogę ją stosować i konfigurować pod inne potrzeby.
Serdeczne podziękowania dla użytkownika urke!

1 użytkowników online, w tym zalogowanych: 0, gości: 1