Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

C# - Nadpisywanie pliku StreamWriterem

lomo1231 08 Dec 2013 15:33 1914 0
  • #1
    lomo1231
    Level 1  
    Witam, piszę program, który ma działać bardziej na zasadzie gry. Mamy 3 pola, zmieniające się obrazki, mamy zatrzymać 3 takie same, dostajemy punkty i gramy na czas. Zrobiłem to wszystko, chciałem zrobić zapisywanie wyniku i wyświetlanie Highscores. To też mam, ładnie wszystko działa. Problem tylko z zapisaniem wyniku w odpowiedniej linii. Z c# dopiero zaczynam przygodę i zadanie to jest na lekcję jako projekt do wykonania w domu.

    Quote:
    if (zapis == true)
    {
    nick = textBox1.Text;
    StreamWriter sw = new StreamWriter("C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
    sw.WriteLine(i + ";" + nick + ";" + wynik2 + Environment.NewLine);
    MessageBox.Show("Zapisano twój wynik.");
    sw.Close();
    }

    Tak wygląda sama część dotycząca zapisu. Jedyne moje pytanie to jak ustawić aby StreamWriter nadpisywał np. tylko 5-tą linię tekstu, a nie kasował wszystko i wstawiał jedną?
    Szukałem wszędzie i nic nie mogę znaleźć ;/
    Z góry dziękuje za pomoc.

    @Edit.
    Rozwiązałem to w ten sposób:
    Quote:

    if (zapis == true)
    {
    int y = 1;
    int z = i + 1;
    nick = textBox1.Text;
    if (nick.Length > 6)
    {
    int x = (nick.Length - 6);
    nick = nick.Remove(nick.Length - x, x);
    }
    StreamWriter sw = new StreamWriter("C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
    while (y < i)
    {
    sw.WriteLine(y + ";" + nicki[y] + ";" + wyniki[y]);
    y++;
    }
    sw.WriteLine(i + ";" + nick + ";" + wynik2);
    while ((z > i) && (z <= 10))
    {
    sw.WriteLine(z + ";" + nicki[i] + ";" + wyniki[i]);
    i++;
    z++;
    }
    MessageBox.Show("Zapisano twój wynik.");
    sw.Close();
    }
    Close();

    Jeżeli ktoś zna prostszy sposób to proszę się podzielić ;)

    W spoilerze wrzucam całość aby łatwiej było zrozumieć ocb.
    Spoiler:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;

    namespace Jednoręki
    {
    public partial class Form4 : Form
    {
    Form1 form1;



    public Form4(Form1 form1)
    {
    this.form1 = form1;
    InitializeComponent();

    asdf();
    spr_wyniku();
    }

    public int wynik2;
    public string nick;
    public int[] wyniki = new int[15];
    public string[] nicki = new string[15];
    public int[] miejsce = new int[15];
    public int i = 0;
    public bool zapis = false;

    public void asdf()
    {
    wynik2 = form1.wynik;
    label1.Text = "Ukończyłeś grę!" + Environment.NewLine + "Twój wynik to: " + wynik2.ToString();
    }

    public void spr_wyniku()
    {
    if (wynik2 > 0)
    {
    StreamReader sr = new StreamReader(@"C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");

    while (sr.EndOfStream == false)
    {
    string linia = sr.ReadLine();
    if (linia.Length > 0)
    {
    i++;
    string[] dane = linia.Split(';');

    miejsce[i] = int.Parse(dane[0]);
    nicki[i] = dane[1];
    wyniki[i] = int.Parse(dane[2]);
    }
    else break;
    }
    while (i >= 1)
    {
    if (wynik2 < wyniki[i])
    {
    if (i >= 10)
    {
    zapis = false;
    label2.Dispose();
    textBox1.Dispose();
    button1.Text = "Powrót do gry";
    break;
    }
    zapis = true;
    i++;
    break;
    }
    else if (wynik2 > wyniki[i])
    {
    button1.Text = "Gotowe";
    label2.Show();
    textBox1.Show();
    zapis = true;
    }
    else break;
    i--;
    }
    sr.Close();
    }
    else
    {
    label2.Dispose();
    textBox1.Dispose();
    button1.Text = "Powrót do gry";
    }
    }

    private void button1_Click(object sender, EventArgs e)
    {
    if (zapis == true)
    {
    int y = 1;
    int z = i + 1;
    nick = textBox1.Text;
    if (nick.Length > 6)
    {
    int x = (nick.Length - 6);
    nick = nick.Remove(nick.Length - x, x);
    }
    StreamWriter sw = new StreamWriter("C:\\Users\\Kamil\\Desktop\\Programowanie zadania\\Jednoręki\\wyniki.txt");
    while (y < i)
    {
    sw.WriteLine(y + ";" + nicki[y] + ";" + wyniki[y]);
    y++;
    }
    sw.WriteLine(i + ";" + nick + ";" + wynik2);
    while ((z > i) && (z <= 10))
    {
    sw.WriteLine(z + ";" + nicki[i] + ";" + wyniki[i]);
    i++;
    z++;
    }
    MessageBox.Show("Zapisano twój wynik.");
    sw.Close();
    }
    Close();
    }
    }
    }