генерировать новое исключение, сохраняя при этом трассировку стека и внутреннюю информацию об исключениях - PullRequest
5 голосов
/ 13 января 2012

У меня есть программа FileSystemWatch, над которой я работаю, и если при копировании файла произошла ошибка, я хочу узнать, в каком файле произошел сбой.В то же время я хотел бы иметь возможность сохранять трассировку стека, а также информацию о внутренних исключениях.

                if (!found)
            {
                try
                {
                    File.Copy(file, Path.Combine(watchDirectory, filename));
                }
                catch (Exception ex)
                {
                    WriteToLog(new Exception(
                        String.Format("An error occurred syncing the Vault location with the watch location. Error copying the file {0}. Error = {1}", file, ex.Message), ex.InnerException));
                }
            }

Итак, исключение, которое передается, я все еще хочу иметь трассировку стекаinfo this, информация о внутреннем исключении, но я хочу, чтобы «message» было моим настраиваемым сообщением, содержащим файл, в котором оно не выполнено, а также отображало «реальное» сообщение, которое было выдано исходным исключением.

1 Ответ

9 голосов
/ 13 января 2012

Я изменил новое исключение, чтобы принимать ex как внутреннее исключение вместо ex.InnerException.Если вы вызовете ToString () для вашего нового экземпляра исключения, он будет включать полную трассировку стека и все внутренние исключения.

try
{
    // ...
}
catch (Exception ex)
{
    string message = String.Format("An error occurred syncing the Vault location with the watch location. Error copying the file {0}.", file);
    Exception myException = new Exception(message, ex);
    string exceptionString = myException.ToString(); // full stack trace
    //TODO: write exceptionString to log.
    throw myException;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...