wpisywanie w pętli do pliku

0

Witam,

mam taki problem.

Aplikacja służy do nasłuchu sieci i wyłapywania pakietów. Pakiet są o określonej strukturze. Czyli przenoszą kilka informacji w tym znacznik. W znaczniku zawarta jest informacja czy dany pakiet jest dla nas interesujący.

Wyłapane pakiety wyświetla w konsoli (i to działa poprawnie)
I chciałbym aby zapisywała do pliku.

I mam tutaj problem, ponieważ do pliku wpisuje tylko jeden, ostatni element.

W pliku txt wygląda to następująco:
9;04:28:10:487 ;04:28:10:501 ;2222

Czyli tak oddzielone ";" mamy numer wysłanego pakietu, godzinę wysłania, godzinę odebrania i port na który przyszedł pakiet.

Na tą chwile aplikacja zapisuje do pliku txt. Nie ukrywam żę w następnym kroku będę chciał aby te zmienne były zapisywane do dokumentu excel.

Proszę o pomoc.

Mój kod

 
namespace ConsoleApplication6
{

    class Program
    {


        public static string datePatt = @"hh:mm:ss:fff tt";


        public static int Main()
        {
            Console.WriteLine("podaj numer portu do nasłuchu\n");
            int listenPort = Convert.ToInt16(Console.ReadLine());

            Console.WriteLine("podaj znacznik\n");
            string znacznik = Console.ReadLine();
            
            string filePath = "plik.txt";

            bool done = false;
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);




            try
            {
                Console.WriteLine("Czekam na poloczenie");
                string[] tabString = new string[4];

                while (!done)
                {

                    byte[] bytes = listener.Receive(ref groupEP);

                    string slowo = Encoding.ASCII.GetString(bytes, 0, bytes.Length);


                   
                    tabString = slowo.Split(';');


                    DateTime saveNow = DateTime.Now;
                    DateTime saveUtcNow = DateTime.UtcNow;
                    string dtString = saveNow.ToString(datePatt);


                    if (tabString[1] == znacznik)
                    {

                        try
                        {


                            string DOZAPISANIA = tabString[0] + ";" + tabString[2] + ";" + dtString + ";" + tabString[3];


                          


                            if (!File.Exists(filePath))
                            { File.Create(filePath); }

                            TextWriter writer = new StreamWriter(filePath);    
                            writer.WriteLine(DOZAPISANIA);        
                            writer.Close();
                               





                            Console.WriteLine("{0}\n", DOZAPISANIA);
                            

                        }





                        catch (Exception ex)
                        {

                        }

                      finally
                        {  
                       tabString[0] = null;
                       tabString[1] = null;
                       tabString[2] = null;
                       tabString[3] = null; 
                        }


                      }

                  
                    

                }

            }
            catch (Exception e)
            {
            }
            finally
            {

                listener.Close();
            }


            return 0;
        }


    }
}



   

Pozdrawiam

1

W jakim celu za każdym razem w pętli sprawdzasz czy plik istnieje + otwierasz strumień? Wyciągnij to i writer.Close() poza pętlę.

A tak nigdy nie znajdziesz błędu:

 
                        catch (Exception ex)
                        {
 
                        }
1

w linijce:

 TextWriter writer = new StreamWriter(filePath); 

nie podałeś żadnej flagi więc domyślnie nie dopisuje a nadpisuje, spróbuj:

 TextWriter writer = new StreamWriter(filePath, bool append); 

\

Edit: A i prościej będzie Ci zapisywać do pliku csv, (tak jak teraz tylko rozszerzenie csv zamiast txt i taki plik bez problemu otworzysz w excelu, a mniejszy nakład pracy :)

0

Wątek uważam za zamknięty:)

wielkie dzięki zadziałało. W sumie prosta operacja a jakże efektywna.

Zamiast "bool append" dałęm po prostu wartość true.

Pozdrawiam

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