У меня есть следующий код C# для вычисления хэша каждого файла в определенном, указанном пользователем каталоге. Дело в том, что он отлично работает, пока не встретит файл, к которому он не может получить доступ. Когда он находит что-то вроде этого, он просто выдает сообщение об ошибке и выходит из программы. Вместо этого я хочу, чтобы это сообщение вызывало ошибку с именем файла, к которому нельзя получить доступ, напишите, что есть ошибка при доступе к этому файлу, и продолжайте выполнение программы с другими файлами в каталоге. Если кто-то может помочь мне изменить мой код и достичь тех вещей, я был бы рад.Попробуйте, оператор catch в C#
private void SHA256Directory(string directory)
{
try
{
SHA256 DirectorySHA256 = SHA256Managed.Create();
byte[] hashValue;
DirectoryInfo dir = new DirectoryInfo(directory);
FileInfo[] files = dir.GetFiles();
foreach (FileInfo fInfo in files)
{
FileStream fStream = fInfo.Open(FileMode.Open);
fStream.Position = 0;
hashValue = DirectorySHA256.ComputeHash(fStream);
Console.WriteLine(fInfo.Name);
Miscellaneous.ByteArrayToHex(hashValue);
Miscellaneous.ByteArrayToBase64(hashValue);
Console.WriteLine();
fStream.Close();
}
return;
}
catch(DirectoryNotFoundException)
{
Console.WriteLine("Error: The directory specified could not be found.");
}
catch(IOException)
{
Console.WriteLine("Error: A file in the directory could not be accessed.");
}
catch(ArgumentNullException)
{
Console.WriteLine("Error: The argument cannot be null or empty.");
}
}
не думает, что это заслуживает другого ответа, но не забывайте, что вы должны либо иметь, используя заявление при открытии потока или, наконец, блока для попытки улова блоков, чтобы обеспечить поток закрыт/удалено –
Хорошо, добавлено ж/кредит вам – tnw