Вывод данных в файл через сервер - 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.
Листинг программы
  1. class Program
  2. {
  3. const int port = 8888;
  4. static TcpListener listener;
  5. static void Main(string[] args)
  6. {
  7. try
  8. {
  9. var aTimer = new System.Timers.Timer();
  10. aTimer.Interval = 10000;
  11. aTimer.AutoReset = true;
  12. aTimer.Start();
  13. listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port);
  14. listener.Start();
  15. aTimer.Elapsed += OnTimedEvent;
  16. Console.WriteLine("Ожидание подключений...");
  17. while (true)
  18. {
  19. TcpClient client = listener.AcceptTcpClient();
  20. ClientObject clientObject = new ClientObject(client);
  21. // создаем новый поток для обслуживания нового клиента
  22. Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
  23. clientThread.Start();
  24. }
  25. }
  26. catch (Exception ex)
  27. {
  28. Console.WriteLine(ex.Message);
  29. }
  30. finally
  31. {
  32. if (listener != null)
  33. listener.Stop();
  34. }
  35. }
  36. private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
  37. {
  38. // Check file access
  39. //delete file's old content
  40. var file = new FileInfo("log.txt");
  41. try
  42. {
  43. //stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
  44. string[] lines = File.ReadAllLines(@"log.txt");
  45.  
  46. StringBuilder newLines = new StringBuilder();
  47. foreach (var line in lines)
  48. {
  49. var date = Convert.ToDateTime(line.Substring(line.IndexOf(' ') + 1));
  50. var currentTime = DateTime.Now;
  51. if(date>=currentTime.AddMinutes(-1))
  52. {
  53. newLines.Append(line + "\n");
  54. }
  55. }
  56. Console.WriteLine("Cleaning...");
  57. using (FileStream fstream = new FileStream("log.txt", FileMode.Create))
  58. {
  59. // запись массива байтов в файл
  60. byte[] array = Encoding.Default.GetBytes(newLines.ToString());
  61. fstream.Write(array, 0, array.Length);
  62. }
  63. }
  64. catch (IOException)
  65. {
  66. //the file is unavailable because it is:
  67. //still being written to
  68. //or being processed by another thread
  69. //or does not exist (has already been processed)
  70. }
  71. }
  72. }
  73. И код класса ClientObject
  74. public class ClientObject
  75. {
  76. public TcpClient client;
  77. public ClientObject(TcpClient tcpClient)
  78. {
  79. client = tcpClient;
  80. }
  81. public void Process()
  82. {
  83. NetworkStream stream = null;
  84. try
  85. {
  86. stream = client.GetStream();
  87. byte[] data = new byte[64]; // буфер для получаемых данных
  88. while (true)
  89. {
  90. // получаем сообщение
  91. StringBuilder builder = new StringBuilder();
  92. int bytes = 0;
  93. do
  94. {
  95. bytes = stream.Read(data, 0, data.Length);
  96. builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
  97. }
  98. while (stream.DataAvailable);
  99. string message = builder.ToString() + "\n";
  100. Console.WriteLine("Записываю в log {0}", message);
  101. try
  102. {
  103. using (FileStream fstream = new FileStream("log.txt", FileMode.Append))
  104. {
  105. // преобразуем строку в байты
  106. byte[] array = Encoding.Default.GetBytes(message);
  107. // запись массива байтов в файл
  108. fstream.Write(array, 0, array.Length);
  109. //Console.WriteLine("Текст записан в файл");
  110. }
  111. }
  112. catch(Exception ex)
  113. {
  114. // ERROR MESSAGE TO CLIENT
  115. //message = ex.Message;
  116. //data = Encoding.Unicode.GetBytes(message);
  117. //stream.Write(data, 0, data.Length);
  118. }
  119. // отправляем обратно сообщение в верхнем регистре
  120. //message = message.Substring(message.IndexOf(':') + 1).Trim().ToUpper();
  121. //data = Encoding.Unicode.GetBytes(message);
  122. //stream.Write(data, 0, data.Length);
  123. }
  124. }
  125. catch (Exception ex)
  126. {
  127. Console.WriteLine(ex.Message);
  128. }
  129. finally
  130. {
  131. if (stream != null)
  132. stream.Close();
  133. if (client != null)
  134. client.Close();
  135. }
  136. }
  137. }
Заранее спасибо!
И еще, очистка происходит не через минуту, а секунд через 5..почему так? помогите плиз

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

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

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


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

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

7   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы