Поймать UnauthorizedAccessException
работает нормально, но это не так, когда я делаю File.WriteAllBytes
-> await Task.Run(() => File.WriteAllBytes(Path + vid.FullName, vid.GetBytes()));
Когда я делаю это, исключение не ловится. Какой лучший способ поймать это исключение, чтобы отображался MessageBox? Спасибо.
(ПРИМЕЧАНИЕ. Этот код явно конвертер YouTube, но он предназначен для моего личного использования )
public async Task ConvertVideoAndDownloadToFolder(string link, string MP3Name = null)
{
try
{
var youtube = YouTube.Default;
var vid = await Task.Run(() => youtube.GetVideo(link));
await Task.Run(() => File.WriteAllBytes(Path + vid.FullName, vid.GetBytes()));
var inputFile = new MediaFile { Filename = Path + vid.FullName };
MediaFile outputFile;
//Creates mp4 and mp3
if (String.IsNullOrEmpty(MP3Name)) { outputFile = new MediaFile { Filename = $"{Path + vid.FullName}.mp3" }; }
//only creates MP4
else { outputFile = new MediaFile { Filename = $"{MP3Name}.mp3" }; }
using (var engine = new Engine())
{
await Task.Run(() => engine.GetMetadata(inputFile));
await Task.Run(() => engine.Convert(inputFile, outputFile));
}
}
catch (Exception ex)
{
if(ex is UnauthorizedAccessException)
{
MessageBox.Show($"Can't write on '{Path}' as it is protected.\rPlease choose another folder. ", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
else if(ex is ArgumentException)
{
MessageBox.Show($"'{link}' is not a valid YouTube link, \rMake sure the video still works, or check the link for typos. ", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
throw;
}
}
}