Вывод данных в файл через сервер - C#

Узнай цену своей работы

Формулировка задачи:

Народ, подскажите пожалуйста, почему мои данные выводятся в файл в одну строку, а не происходит переноса на новую строку, к тому же пробел исчез..как выглядит сейчас: 0: 28.06.2016 22:42:511: 28.06.2016 22:42:522: 28.06.2016 22:42:533: 28.06.2016 22:42:544: 28.06.2016 22:42:55 А должно выводиться так: 0: 28.06.2016 22:42:51 1: 28.06.2016 22:42:52 2: 28.06.2016 22:42:53 3: 28.06.2016 22:42:54 4: 28.06.2016 22:42:55 Суть в том, что от клиента приходят эти данные на сервак, в переменную message..сервер их записывает в файл, затем через минуту происходит перезапись.. Вот код класса Program.
class Program
    {
        const int port = 8888;
        static TcpListener listener;
        static void Main(string[] args)
        {
            try
            {
                var aTimer = new System.Timers.Timer();
                aTimer.Interval = 10000;
                aTimer.AutoReset = true;
                aTimer.Start();
 
                listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port);
                listener.Start();
                aTimer.Elapsed += OnTimedEvent;
                Console.WriteLine("Ожидание подключений...");
 
                while (true)
                {
                    TcpClient client = listener.AcceptTcpClient();
                    ClientObject clientObject = new ClientObject(client);
 
                    // создаем новый поток для обслуживания нового клиента
                    Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
                    clientThread.Start();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (listener != null)
                    listener.Stop();
            }
        }
        private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
        {
            // Check file access
            //delete file's old content
            var file = new FileInfo("log.txt");
            try
            {
                //stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
                string[] lines = File.ReadAllLines(@"log.txt");

                StringBuilder newLines = new StringBuilder();
                foreach (var line in lines)
                {
                    var date = Convert.ToDateTime(line.Substring(line.IndexOf(' ') + 1));
                    var currentTime = DateTime.Now;
                    if(date>=currentTime.AddMinutes(-1))
                    {
                        newLines.Append(line + "\n");
                    }
                }
                Console.WriteLine("Cleaning...");
                using (FileStream fstream = new FileStream("log.txt", FileMode.Create))
                {
                    // запись массива байтов в файл
                    byte[] array = Encoding.Default.GetBytes(newLines.ToString());
                    fstream.Write(array, 0, array.Length);
                }
            }
            catch (IOException)
            {
                //the file is unavailable because it is:
                //still being written to
                //or being processed by another thread
                //or does not exist (has already been processed)
            }
        }
    }
 
И код класса ClientObject
 
public class ClientObject
    {
        public TcpClient client;
        public ClientObject(TcpClient tcpClient)
        {
            client = tcpClient;
        }
        public void Process()
        {
            NetworkStream stream = null;
            try
            {
                stream = client.GetStream();
                byte[] data = new byte[64]; // буфер для получаемых данных
                while (true)
                {
                    // получаем сообщение
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0;
                    do
                    {
                        bytes = stream.Read(data, 0, data.Length);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (stream.DataAvailable);
 
                    string message = builder.ToString() + "\n";
 
                    Console.WriteLine("Записываю в log {0}", message);
 
                    try
                    {
                        using (FileStream fstream = new FileStream("log.txt", FileMode.Append))
                        {
                            // преобразуем строку в байты
                            byte[] array = Encoding.Default.GetBytes(message);
                            // запись массива байтов в файл
                            fstream.Write(array, 0, array.Length);
                            //Console.WriteLine("Текст записан в файл");
                        }
                    }
                    catch(Exception ex)
                    {
                        // ERROR MESSAGE TO CLIENT
                        //message = ex.Message;
                        //data = Encoding.Unicode.GetBytes(message);
                        //stream.Write(data, 0, data.Length);
                    }
 
                    // отправляем обратно сообщение в верхнем регистре
                    //message = message.Substring(message.IndexOf(':') + 1).Trim().ToUpper();
                    //data = Encoding.Unicode.GetBytes(message);
                    //stream.Write(data, 0, data.Length);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (stream != null)
                    stream.Close();
                if (client != null)
                    client.Close();
            }
        }
    }
Заранее спасибо!
И еще, очистка происходит не через минуту, а секунд через 5..почему так? помогите плиз

Решение задачи: «Вывод данных в файл через сервер»

textual
Листинг программы
string message = builder.ToString() + "\n";

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы