Возможна попытка/выгода вокруг целой программы C#?

Частичное решение с помощью ROBOCOPY

Частичное решение (и, таким образом, для меня, к сожалению, «нерешение», хотя у меня изначально были на это большие надежды), которое может быть или не быть достаточным для вас:

Похоже, инструмент ROBOCOPY можно (ab-) использовать для рекурсивного сравнения своего рода бедного человека ; с досадным ограничением, что он, по-видимому, не сравнивает содержимое файла . Кажется, для сравнения размеры, даты и, необязательно, атрибуты . Магическое заклинание для этого было бы:

ROBOCOPY path1 path2 /e /l /ns /njs /njh /ndl /fp /log:result.txt /it

где options , означающее , кажется:

  • /e - recurse , включая пустые каталоги;
  • /l - только печатать журнал, не изменять файлы;
  • /ns /njs /njh - не печатать размеры файлов, задания итоги, заголовок задания;
  • /ndl - «не регистрировать имена папок»
    • ПРИМЕЧАНИЕ: по сообщениям, это приведет к пропуску пропущенных / лишних пустых папок; если вы не используете это, они должны быть зарегистрированы, но вам придется каким-то образом удалять не отличающиеся каталоги другими способами;
  • /log:result.txt - записывать результаты в 'result файл .txt '; Я думаю, что это может быть опущено, и результат будет показан на стандартном выводе.

Дополнительные опции:

Предупреждение: НЕ сравнивать содержимое файла

Как я уже говорил выше, это, к сожалению, не для сравнения содержимого файла. Я проверил это, выполнив сначала следующую команду:

mkdir d1\a\b d2\a\b & echo x > d1\a\b\f & echo y > d2\a\b\f

В большинстве случаев это должно приводить к файлам d1 \ a \ b \ f и d2 \ a \ b \ f с одинаковыми временными метками, вы можете проверить с dir d1\a\b\f d2\a\b\f. robocopy вызов на d1 & amp; d2 дал пустой набор результатов для меня.

23
задан Graviton 21 October 2009 в 15:14
поделиться

2 ответа

To catch Windows Form's unhandled exceptions hook-up the AppDomain.UnhandledException and Application.ThreadException events.

Of interest: Unexpected Errors in Managed Applications

38
ответ дан 29 November 2019 в 01:45
поделиться

Basically, you cannot catch all exceptions when using the default CLR hosting process. Period. This is because the AppDomain.UnhandledException event is a notification only, you cannot handle the exception (which means that you cannot prevent the application from being terminated after processing the notification).

However, you can catch and handle all exceptions in the UI thread of a WinForms application by using its Application.ThreadException handler (and control the behavior via UnhandledExceptionMode). Other threads which throw an exception will not be caught by this handler.

In general, it's not a good idea to try and handle all exceptions. You can, however, use the AppDomain.UnhandledException для регистрации ошибки и / или выполнения важных задач по очистке (например, выключение файловой базы данных или что-то еще).

8
ответ дан 29 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

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