You should catch exceptions that you are expecting - and fail gracefully on exceptions that you aren't expecting (by catching them in a general exception handler).
In your example - creating DirectoryInfo() can throw multiple exceptions - but there is no reason you can't just
try
{
var di = new DirectoryInfo(somePath);
}
catch(Exception ex)
{
// Messagebox/alert the user etc, gracefully exit/cancel/throw if needed
}
It may be that you want to catch the security exception and provide some other code, well do it, but keep your 'general case' handler
try
{
var di = new DirectoryInfo(somePath);
}
catch(SecurityException ex)
{
// Carry on but use a default path or something etc
}
catch(Exception ex)
{
// Messagebox/alert the user etc, gracefully exit/cancel
}