Philippe Mori
DirectoryInfo
связанные с этим вещи кажутся бесполезными в вашем коде.
В вашем коде нет кода, который отправляет SMS, поэтому невозможно сказать вам, в чем проблема. Однако вам было бы очень легко поставить точку останова на коде, который действительно отправляет SMS, и посмотреть, почему отправляется сообщение.
Тем не менее, зачем вам проверять каждые 4 секунды? Если вам нужна такая точность, не будет ли использование FileSystemWatcher более уместным (Класс FileSystemWatcher (System.IO)[^])?
Я думаю, что одна из проблем с вашим кодом заключается в том, что вы добавляете элемент в таблицу каждые 4 секунды, поэтому вы отправите много SMS, если отправите по одному для каждой строки в таблице. Вам, вероятно,нужно запомнить, было ли отправлено SMS, и только одно отправлено, если не было отправлено ни одного SMS. В противном случае у вас было бы много сообщений для отправки.
Предполагая, что вы отправляете отдельные сообщения многим людям, вы также можете переполнить емкость своего почтового сервера в зависимости от того, как отправляются сообщения. Если это так, то он может продолжать отправлять электронную почту еще долго после того, как состояние предупреждения исчезнет.
Кроме того, некоторые строки не имеют правильного отступа, и пустые строки кажутся несколько произвольными. Это может не повлиять на результат, но программист должен быть профессионалом, который заботится о деталях.
Наконец, кажется, что вы не знаете сухого принципа (Не повторяйтесь - Википедия, свободная энциклопедия[^]). На самом деле очень легко заметить, что код для abcPath
очень похоже на код для defPath
Это очень плохо, так как все изменения, которые вы делаете для abcPath
, вам придется повторить это для defPath
и если вы добавите третий путь для проверки, это будет еще хуже.
Ваша функция имеет более чем одну ответственность. Вы когда-нибудь читали о твердых принципах (SOLID (объектно-ориентированный дизайн) - Википедия, свободная энциклопедия[^]). В вашем случае ваш код не уважает SRP (Принцип единой ответственности-Википедия, свободная энциклопедия[^]).
Еще одна проблема с вашим кодом заключается в том, что вы используете жестко закодированную константу в своем коде на протяжении всего времени. Если вы решите изменить продолжительность (скажем, 10 минут вместо 5), Вы должны найти каждое вхождение жестко закодированного значения 5 и посмотреть, связано ли это число с продолжительностью. Для крупных проектов было бы почти невозможно найти все такие значения. То же самое относится и к 4000 МС времени сна.
Любая Константа (за исключением тривиального случая, подобного 1 в некоторых обстоятельствах) должна быть объявлена таковой. Например:
const int maxDelayMinutes = 5;
Кроме того, когда время должно рассматриваться как одно и то же время, я бы предложил вам использовать переменную, чтобы сделать намерение ясным. Это могло бы избежать некоторых тонких ошибок, если бы время между вызовом
DateTime.Now
и код предполагает, что время точно такое же.
Такого рода проблемы гораздо проще отлаживать с помощью отладчика. Из такого вопроса мы можем только догадываться, что делает другой код (например, фактическая отправка SMS), но если проблема заключается в коде, который не показан, как мы можем ее угадать?
Кроме того, некоторая информация, такая как обеспечение правильного времени, имеет решающее значение. Например, если вы смешиваете местное и UTC время в своем коде, то оно может работать не так, как предполагалось. Такую проблему очень легко решить с помощью отладчика. Вы должны внести изменения в каталог, а затем шагнуть в свой код, чтобы увидеть, если
timediff
имеет ожидаемое значение. Обычно он работает по времени UTC и использует только местное время для отображения. На самом деле, этот код, вероятно, не будет работать так, как ожидалось, когда изменится летнее время.
super_user
В вашем коде нет кода, который отправляет SMS, поэтому невозможно сказать вам, в чем проблема. Однако вам было бы очень легко поставить точку останова на коде, который действительно отправляет SMS, и посмотреть, почему отправляется сообщение.
------ sms отправляется из базы данных, так что забудьте об отправке sms--------
Тем не менее, зачем вам проверять каждые 4 секунды? Если вам нужна такая точность, не будет ли использование FileSystemWatcher более подходящим (класс FileSystemWatcher (System.IO) [^])?
-----да мне нужна именно такая точность, как я это делаю. я хочу проверить каждые 5 монетных дворов-------
Я думаю, что одна из проблем с вашим кодом заключается в том, что вы добавляете элемент в таблицу каждые 4 секунды, поэтому вы отправите много SMS, если отправите по одному для каждой строки в таблице. Вам, вероятно,нужно запомнить, было ли отправлено SMS, и только одно отправлено, если не было отправлено ни одного SMS. В противном случае у вас было бы много сообщений для отправки.
----да, это проблема отправки sms непрерывно .. когда я проверяю свой мобильный телефон, есть около 12 + sms .. где, как я хочу, когда файл не создается с помощью 5 секунд, то хочу вставить запись в таблицу только один раз ---
и я поставил адрес пути в приложение.файла config я.е.С:\Пользователи\администратор\рабочий стол\Азбука
Philippe Mori
Так или иначе, вам нужно иметь информацию в базе данных, чтобы знать, происходит ли изменение после последнего отправленного SMS. Или вы можете сохранить эту информацию в памяти, если вас не очень волнует эффект перезапуска консольного приложения.
Таким образом, если в какой-то момент обнаруживается изменение, вам нужно обновить информацию, чтобы после этого не отправлять SMS. Вам, вероятно,также нужно помнить, было ли отправлено SMS.
Учитывая, что вы не хотите рассказывать нам, как отправляются SMS-сообщения, то мы не можем помочь вам более точно, что дает некоторые общие идеи.