Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос! / 25 сообщений из 34, страница 1 из 2
09.06.2016, 01:02
    #39253209
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Приветствую!
написал небольшую программу по загрузке файла на фтп, все работает, но есть вопрос:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
   class Program
    {
      
        static void Main(string[] args)
        {
            PingServer ps = new PingServer();           
            DateTime dt = DateTime.Now;
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp");
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential("", "");

                StreamReader sourceStream = new StreamReader("");
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;

                Stream requestStream = request.GetRequestStream();

                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                if (response.StatusDescription != null)
                {
                    using (StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))
                    {
                        sw.WriteLine("'Upload File Complete, status {0}'" + dt, response.StatusDescription);
                        sw.Close();
                    }
                }
                else
                              
                response.Close();
                
            }
            catch
            {                
                using (StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))
                {
                      sw.WriteLine("I can't enter the site !!!WARNING!!!" + " " + dt);
                }
        
            }
        }
       
    }


вот класс, где я проверяю на доступность сервера:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 class PingServer 
    {
        
        public PingServer()
        {
          DateTime dt = DateTime.Now;
          Ping pi = new Ping();
          PingReply pr = pi.Send("");
            if (pr.Status == IPStatus.Success)
	        {
                using (StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))
                {
                    sw.WriteLine("Server is connecting" + " " + dt);
                    sw.Close();
                }                
            }
            else
            {               
                using( StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))                   
                {
                    sw.WriteLine("Server is not available!!!WARNING!!!" + " " + dt);
                }                
            }           
        } 
    }



Почему я не могу использовать в классе Program например так:
Код: c#
1.
2.
3.
4.
5.
PingServer ps = new PingServer();
using(ps.sw)
{
lalalalalal + ps.dt;
}


инкапсуляция же... или не все свойства классов можно использовать в сторонних классах?
...
Рейтинг: 0 / 0
09.06.2016, 10:36
    #39253350
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Гуру ООП вы где:)
...
Рейтинг: 0 / 0
09.06.2016, 10:44
    #39253354
Euvgen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Так у тебя dt & sw не свойства класса, а локальные переменные в PingServer(). Их дальше этой функции никак
...
Рейтинг: 0 / 0
09.06.2016, 10:55
    #39253370
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Ping'овать сервер перед подключением, бесполезная трата времени, тем более нет ни какой гарантии того, что сервер вообще будет отвечать на ICMP запросы. по этому, лучше это вообще убрать
...
Рейтинг: 0 / 0
09.06.2016, 11:29
    #39253403
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Roman Mejtes,

Что, достаточно отлавливать ошибку?
...
Рейтинг: 0 / 0
09.06.2016, 11:35
    #39253413
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Euvgen,

то есть, если я в конструкторе класса объявляю переменные, то в основном классе Program я их не могу использовать,так?
...
Рейтинг: 0 / 0
09.06.2016, 12:09
    #39253452
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
...
Рейтинг: 0 / 0
09.06.2016, 13:27
    #39253578
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
mishanya3624Euvgen,

то есть, если я в конструкторе класса объявляю переменные, то в основном классе Program я их не могу использовать,так?
Область видимости переменных ограничена методом/конструктором.
...
Рейтинг: 0 / 0
09.06.2016, 13:35
    #39253599
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
ЕвгенийВ,
скобочками в виде лука для стрельбы стрелами
...
Рейтинг: 0 / 0
09.06.2016, 13:42
    #39253605
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
skyANA,

Спасибо.
...
Рейтинг: 0 / 0
09.06.2016, 13:45
    #39253609
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
class Program
    {
      
        static void Main(string[] args)
        {
            PingServer ps = new PingServer(); 
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("f");
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential("", "");

                StreamReader sourceStream = new StreamReader("");
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;

                Stream requestStream = request.GetRequestStream();

                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                if (response.StatusDescription != null)
                {                   
                    using (ps.sw)
                    {                        
                        ps.sw.WriteLine("Upload File Complete, status {0}" + " " + ps.dd , response.StatusDescription);                        
                    }
                }
                else
                              
                response.Close();
                
            }
            catch
            {                
                using (ps.sw)
                {
                      ps.sw.WriteLine("I can't enter the site !!!WARNING!!!" + " " + ps.dd);
                }
        
            }
             
        }
       
    }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 class PingServer 
    {
        public DateTime dd = DateTime.Now;
        public StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default);       
        public PingServer()
        {          
          Ping pi = new Ping();
          PingReply pr = pi.Send("");
            if (pr.Status == IPStatus.Success)
	        {              
                using (sw)
                {
                    sw.WriteLine("Server is connecting" + " " + dd);                   
                }                
            }
            else
            {               
                using(sw)                   
                {
                    sw.WriteLine("Server is not available!!!WARNING!!!" + " " + dd);
                }                
            }           
        }        
    }


Почему при запуске он ругается, что "Additional information: Запись в закрытый TextWriter невозможна."?
Я же нигде StreamWriter не закрываю...
PingServer он проходит, ругается уже на ps.sw в Program.
...
Рейтинг: 0 / 0
09.06.2016, 13:47
    #39253614
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
ЕвгенийВ,

Спасибо.
...
Рейтинг: 0 / 0
09.06.2016, 13:50
    #39253618
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
mishanya3624, using (ps.sw), using (sw)
...
Рейтинг: 0 / 0
09.06.2016, 14:04
    #39253639
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
buser,

ну так я же вызываю переменную sw из класса PingServer которая, как раз и открывает запись.
если я закоменчу весь конструктор PIngServer, то все отрабатывает с ps.sw.
где тут собака зарыта?:)
...
Рейтинг: 0 / 0
09.06.2016, 14:53
    #39253687
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
mishanya3624, во что разворачивается using вы знаете?
...
Рейтинг: 0 / 0
09.06.2016, 15:04
    #39253699
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
buser,

try, finally
Спасибо
...
Рейтинг: 0 / 0
09.06.2016, 15:11
    #39253711
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
mishanya3624try, finally
Dispose забыли
...
Рейтинг: 0 / 0
09.06.2016, 15:40
    #39253740
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Изопропил,

да.

Подскажите, например хочу писать лог помимо файла еще и в базу данных.
В таком случае, лучше разделять на потоки методы записи в файл и в базу, или все одним поток делать?
...
Рейтинг: 0 / 0
09.06.2016, 15:49
    #39253748
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
mishanya3624,

лучше взять готовый логгер (nlog, log4net и т д) и на уровне его конфигурации задавать листенеры , их параметры, формат журнала и т д
...
Рейтинг: 0 / 0
09.06.2016, 15:49
    #39253749
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
mishanya3624Подскажите, например хочу писать лог помимо файла еще и в базу данных.
В таком случае, лучше

лучше использовать решения типа NLog, в котором многое предусмотрено
...
Рейтинг: 0 / 0
09.06.2016, 16:44
    #39253797
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Спасибо.
Эдакий зверюга не взлетает наскоком, пошел курить маны...
...
Рейтинг: 0 / 0
10.06.2016, 07:18
    #39253983
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Изопропиллучше можно взять готовый логгерПоправил.
...
Рейтинг: 0 / 0
10.06.2016, 11:03
    #39254086
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Получилось настроить пока на запись в файл.
А если я хочу, чтобы на разные ошибки разный Exception вываливал, это я должен все в коде программы учитывать, или как-то в nlog.conf это прописывается?
...
Рейтинг: 0 / 0
10.06.2016, 11:06
    #39254090
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
mishanya3624ошибки разный Exception
логгер занимается только регистрацией
...
Рейтинг: 0 / 0
10.06.2016, 12:27
    #39254173
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Изопропил,

Понял, спасибо.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос! / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]