Jak zrobić (katalogi, edycja plików, listowanie).

0

Witajcie.

Potrzebuję od was pomocy. Chciałbym napisać program w którym była by możliwość dodania "gracza"(daję jako przykład bo innego nie mogłem wymyślić) do bazy danych (folderu). Po kliknięciu buttona pobierałby by się dane z textboxa1 (nick) i textboxa2 (email) i zapisywały do pliku, który przybierałby nazwę taką jak nick. To już mam zrobione. Następnie program wyświetla listę "graczy" (plików) w listboxie. I tu napotykam problem. Nie do końca wiem jak to zrobić a jak już zrobiłem to miałem problemy z "odświeżaniem" po dodaniu nowego gracza. Rzeczą następną jest otwieranie aktualnie zaznaczonego pliku na liście i pobieranie z niego 2-giej linijki (e-mail) i zapisywanie go do zmiennej.

Proszę o pomoc i wyrozumiałość, bo jestem początkującym "programistą". Proszę też o szczery komentarz do kodu, który już mam.

Kod:

 
public partial class Form1 : Form
    {
        List<string> _items = new List<string>();

        public Form1()
        {
            InitializeComponent();
            /*
            _items.Add("One"); // <-- Add these
            _items.Add("Two");
            _items.Add("Three");
           
            TextReader odczyt = new StreamReader("1/");
            list.DataSource = odczyt.ReadLine();
            odczyt.Close();           
            list.DataSource = _items;
         
             */
             



        }


        private void btnAdd_Click(object sender, EventArgs e)
        {


            if (txtMail.Text != "" || txtNick.Text != "")
            {
                _items.Add(txtNick.Text); // <-- Any string you want

                // Change the DataSource.
                list.DataSource = null;
                list.DataSource = _items;

                using (StreamWriter zapis = new StreamWriter("1/"+ txtNick.Text + ".txt", true))//zapisanie nicku do pliku z nikiem jako nazwa
                {
                    zapis.WriteLine(txtNick.Text);
                }
                using (StreamWriter zapis = new StreamWriter("1/" + txtNick.Text + ".txt", true))//dopianie emaila
                {
                    zapis.WriteLine(txtMail.Text);
                }
               
            }
            else
            {
                MessageBox.Show("Nie wpisałeś/aś nicku lub e-maila", "Błąd"); //Sprawdzanie czy zostały wypełnione pola
            }
        }
0
 if (txtMail.Text != "" || txtNick.Text != "")

raczej chciałeś zrobić:

 if (txtMail.Text != "" && txtNick.Text != "")
                using (StreamWriter zapis = new StreamWriter("1/"+ txtNick.Text + ".txt", true))//zapisanie nicku do pliku z nikiem jako nazwa
                {
                    zapis.WriteLine(txtNick.Text);
                }
                using (StreamWriter zapis = new StreamWriter("1/" + txtNick.Text + ".txt", true))//dopianie emaila
                {
                    zapis.WriteLine(txtMail.Text);
                } 

wrzuć to do jednego "using"

pliki txt sprawdzaj sobie za pomocą

 Directory.GetFiles(); //możesz dodać filtr plików *.txt

możesz np to zamieścić w metodzie którą będziesz wywoływał również po dodaniu gracza (odświeżanie)

Zaznaczony plik z listBoxa sprawdzasz jako _items[list.SelectedIndex] i odczytujesz StreamReaderem nick/mail czy co tam chcesz.

0

Dziękuję bardzo za odpowiedź! :)

Markness napisał(a):

wrzuć to do jednego "using"

A jak by to wyglądało, bo nie chcę czegoś pochrzanić.

Markness napisał(a):

pliki txt sprawdzaj sobie za pomocą

 Directory.GetFiles(); //możesz dodać filtr plików *.txt

możesz np to zamieścić w metodzie którą będziesz wywoływał również po dodaniu gracza (odświeżanie)

&&

Markness napisał(a):

Zaznaczony plik z listBoxa sprawdzasz jako _items[list.SelectedIndex] i odczytujesz StreamReaderem nick/mail czy co tam chcesz.

Również nie bardzo wiem jak się do tego zabrać.

1
                using (StreamWriter zapis = new StreamWriter("1/"+ txtNick.Text + ".txt", true)
                {
                    zapis.WriteLine(txtNick.Text);
		    zapis.WriteLine(txtMail.Text);
                } 
        private void PobierzGraczy()
        {
            list.DataSource = Directory.GetFiles(Environment.CurrentDirectory, "*.txt");
        }

wywołaj to podczas ładowania formy oraz po każdym dodaniu gracza

w sumie można sie obejść bez listy, w obsłudze Click dla przycisku który ma czytać plik:

 
            using(StreamReader sr = new StreamReader(listBox1.Text))
            {
                string nick = sr.ReadLine();
                string mail = sr.ReadLine();
                MessageBox.Show(nick + "   " + mail);
            }

Teraz w listBoxie będziesz miał ścieżki a nie nazwy plików, jeśli chcesz same nazwy to proponuje zrobić Dictionary<string, string> i trzymać sobie tam nazwę pliku / ścieżkę

0

Dzięki wielkie, wszystko działa. :) Tylko nie rozumiem tego:

Markness napisał(a):
               
> 
> Teraz w listBoxie będziesz miał ścieżki a nie nazwy plików, jeśli chcesz same nazwy to proponuje zrobić Dictionary<string, string> i trzymać sobie tam nazwę pliku / ścieżkę
0
Markness napisał(a):

Teraz w listBoxie będziesz miał ścieżki a nie nazwy plików, jeśli chcesz same nazwy to proponuje zrobić Dictionary<string, string> i trzymać sobie tam nazwę pliku / ścieżkę

Nazwę pliku akurat łatwo wyciągnąć ze ścieżki przez Path.GetFileName.

0

Jasne, dzięki. Pojawił się kolejny problem.
Mianowicie, dodałem jeszcze comboBoxa "banned" Z opcjami: Tak/Nie. I po naciśnięciu przycisku "Add"
cała zawartość listBoxa znika, ale nie do końca, ponieważ tak jakby tekst robił się przeźroczysty bo labele zmieniają postać.
Kod wszystko wyjaśni.:) Oto co do tej pory udało mi się napisać, z waszą pomocą:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net.Mail;
using System.Net;


namespace ListBoxy
{
    public partial class Form1 : Form
    {
        List<string> _items = new List<string>();

        public Form1()
        {
            InitializeComponent();
            /*
            _items.Add("One"); // <-- Add these
            _items.Add("Two");
            _items.Add("Three");
           
            TextReader odczyt = new StreamReader("1/");
            list.DataSource = odczyt.ReadLine();
            odczyt.Close();           
            list.DataSource = _items;
         
             */

            PobierzGraczy();


        }

        private void PobierzGraczy()
        {
            list.DataSource = Directory.GetFiles("1/", "*.txt");
            //list.DataSource = Directory.GetFiles(Environment.CurrentDirectory, "*.txt");
        }


        private void btnAdd_Click(object sender, EventArgs e)
        {
            PobierzGraczy();

            if (txtMail.Text != "" && txtNick.Text != "")
            {
                _items.Add(txtNick.Text); // <-- Any string you want

                // Change the DataSource.
                list.DataSource = null;
                list.DataSource = _items;

                 using (StreamWriter zapis = new StreamWriter("1/"+ txtNick.Text + ".txt", true))
                {
                    zapis.WriteLine(txtNick.Text);
                    zapis.WriteLine(txtMail.Text);
                    zapis.WriteLine(bannned.Text); 
                }
                 PobierzGraczy();
               
            }
            else
            {
                MessageBox.Show("Nie wpisałeś/aś nicku lub e-maila", "Błąd"); //Sprawdzanie czy zostały wypełnione pola
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            SmtpClient client = new SmtpClient("smtp.wp.pl", 587);
            client.Credentials = new NetworkCredential("[email protected]", "********");
            MailMessage msg = new MailMessage();
            msg.From = new MailAddress("[email protected]");
            msg.To.Add(new MailAddress(txtAdres.Text));
            msg.Subject = "Informacja techniczna eventu";
            msg.Body = richTextBox1.Text;
            try
            {
                client.Send(msg);
                MessageBox.Show("Wysłanie meila ukończone z powodzeniem", "Wysłano");

            }
            catch (Exception lol)
            {
                MessageBox.Show("Błąd" + lol);
            }

        }

        private void checkSendToAll_CheckedChanged(object sender, EventArgs e)
        {
            if (txtAdres.Enabled == false) //Zmiana stanu textbox'a
            {
                txtAdres.Enabled = true;
            }
            else
            {
                txtAdres.Enabled = false;
            }


        }

        private void list_SelectedIndexChanged(object sender, EventArgs e)
        {
            using (StreamReader sr = new StreamReader(list.Text))
            {
                string nick = sr.ReadLine();
                string mail = sr.ReadLine();
                string banned = sr.ReadLine();
                label10.Text = nick;
                label11.Text = mail;
                label12.Text = banned; 
            }
            
        }
0

No ludzie pomóżcie ...

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