Задать вопрос
@Nirmanakaya61

Почему не создается новый файл в C#?

Помогите, пожалуйста, найти причину почему программа не создает новый файл. Суть проблемы: форма, где можно ввести ip и диапазон портов, кнопка "Scan" (запускает метод ScanPort из NetService.cs), в NetService.cs подключаемся к порту и если он открыт пишем в файл в корне С: строчку, что открыт (в блоке try), если не подключаемся, то в catch пишем в файл строчку, что порт закрыт. Имя файла создается на основе даты-времени в FileService.cs (работа с файлом идет через него). Проблема в том, что при запуске в VS первый раз файл создается, а дальше, если мы не перезапускаем приложение, а повторно нажимаем кнопку Scan, даже изменив ip/порты, либо идет дозапись в данный файл (если StreamWriter file = new StreamWriter(Settings.path, true) ), либо все стирается и пишутся результаты нового сканирования (если стоит false). Хотя по логике должен создаваться новый файл c другим именем. В чем может быть проблема? Может что-то с освобождением ресурсов?

NetService.cs :

using System;
using System.Net.Sockets;
using System.Threading.Tasks;

namespace WinPortScanner
{
    class NetService : IDisposable
    {
        public static void ScanPort(string ip, int startPort, int endPort)
        {
            int closedPort = 0;
            if (startPort > endPort)
            {
                int tempPort = startPort;
                startPort = endPort;
                endPort = tempPort;
            }

            using (FileService fileService = new FileService())
            {
                using (TcpClient client = new TcpClient())
                {

                    for (int port = startPort; port <= endPort; port++)
                    {

                        try
                        {

                            closedPort = port;
                            client.Connect(ip, port);
                            fileService.WriteOpen(ip, port);
                            client.Close();

                        }

                        catch (SocketException e)
                        {

                            fileService.WriteClose(ip, closedPort);

                        }

                    }
                    client.Close();

                }
                fileService.CloseFile();
            }
        }

        public void Dispose()
        {

        }
    }
}


FileSevice.cs :

using System;
using System.Threading.Tasks;

namespace WinPortScanner
{
    class FileService : IDisposable
    {
        private StreamWriter file = new StreamWriter(Settings.path, true);

        public void Dispose()
        {
           
        }

        public void WriteOpen(string ip, int port)
        {
            file.WriteLine($"{DateTime.Now}, {ip}, {port}, Open");
        }

        public void WriteClose(string ip, int port)
        {
            file.WriteLine($"{DateTime.Now}, {ip}, {port}, Close");
        }

        public void CloseFile()
        {
            file.Close();
        }
    }
}
  • Вопрос задан
  • 182 просмотра
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
Adler_lug
@Adler_lug
Что-то я не понял, где у вас Settings.path задается?
Не вижу, что бы этот параметр где-то в ScanPort менялся.

По видимом вы где-то присвоили значение Settings.path и оно больше не меняется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы