Лучше вместо Clipboard.Clear(); Clipboard.SetText() использовать Clipboard.SetObject() он с меньшей долей вероятности вываливает ошибку, что буфер не инициализирован
Лучший! Сэнсэй! Здоровья тебе и долгих лет жизни! После 19 уроков мне захотелось, вот просто хочу и все! Чтоб нажал по кнопке и текст из файла перекочевал в другой файл, вот хочу я так и все. void button1_Click(object sender, EventArgs e) { Method(); } void Method() { string r; string schit = @"C:\1.txt"; string zapis = @"C:\2.txt"; using (StreamReader sr = new StreamReader(schit, System.Text.Encoding.Default)) { r = sr.ReadToEnd(); } using (StreamWriter sw = new StreamWriter(zapis, false, System.Text.Encoding.Default)) { sw.WriteLine(r); } }
*Зачем finally если код внутри него выполниться в любом случае, как и код после finally?* *Ответ:* finally используют для завершения потоков в основном. Да и так по красивше смотриться, когда в блоке try/catch/finally связанные данные. Не всегда выполняется код после finally. Например, у Вас есть try catch finally, где catch ловит, допустим, IndexOfOutException, а у вас вылетает IOException. И в этом случае, когда Вы ожидаете поймать одно исключение, но ловите НЕ ПРЕДУСМОТРЕННОЕ исключение, которое никак не обрабатываете, вот тогда то что за finally не выполнится, а сам finally выполнится.
Оо, так catch - можно юзать для записей ошибок в log, чтобы пользователи просто могли логи кидать, и ты сам смотрел ошибки =) + можно добавлять время, чтобы понимать когда ошибка была совершена)
Более того, объекты класса Excaption обладают всей необходимой информацией об ошибке. "За кулисами", когда возникает ошибка в Try, создается объект Excaption в той переменной (а если точнее, то переменная с ссылкой на объект), которую вы указали в скобочках - "ex" или "e" обычно. И через эту переменную можно получить всю всю информацию об ошибке. А если этой информации вам все же недостаточно, то так сказать, раскручиваем ООП на полную - наследуемся от Excapton, дополняем его дополнительными нужными нам полями, свойствами, методами, событиями и т.д. Таким образом мы инкапсулируем весь код в отдельный класс, и избавляемся от шаблонного в мэйне. Например, нужно писать ошибки в файл? - ок - Наследуемся от Excaption, Пишем в нем метод void SaveToFile(string fileName){//код сохранения данных в fineName }.
еще по поводу остальных видов исключений. Из видео как-то не очень понятно, зачем они вообще, раз можно все отловить общим исключением Exception. Тем не менее, кэтчей может быть несколько, в первом ловим один вид исключения и посылаем юзера по одному адресу, в следующем кэтче - по другому, а если уж обстоятельства крайне неясные и косяк затерялся в глубинах кода, ловим в конце Exception. Спасибо за видео! Все очень круто, и легко и весело смотрится)
Уря я теперь умею обходить это зловредное исключение как оно меня мучало) а когда пробовал сам чёт не чего не получалось всё равно вылезало противное сообщение. Теперь я доволен и спокойно на сердце) Спасибо Хачатур я в своих познаниях благодаря тебе преодолел ещё одну ступеньку, как там говорится курочка по зёрнешку)))
Нас учили и говорили создавать свои собственные исключения=), а еще можно типа прописывать куеву тучу catch с определённым видом исключения, и определённый catch словит ту или иную ошибку, визуально превращается в как switch. Ваш код куда приятнее=)
Стоит уточнить, что finally выполняется не всегда. Самый простой случай: try { Close(); } catch { MessageBox.Show("catch block's working"); } finally { MessageBox.Show("Bugaga"); } Плюс если из Диспетчера закрыть программу, но это, пожалуй, очевидно. Плюс при работе с потоками, но это попозже.
Рекомендую обрабатывать конкретные классы потомки exception, в таком случае не нужно будет кучу ветвлений городить. Если вы в первом catch напишите (exception ex) вы перекроете себе возможность ловить конкретные типы классов наследников exception.
у любого исключения есть , замечательное свойство ,которое возвращает только текст конкретной ошибки, без всякого хлама и мусора, это Message - Возвращает сообщение, описывающее текущее исключение поэтому лучше писать catch( Exception e ) { MessageBox.Show(e.Message, "что-то пошло не так") }
Еще можно было бы рассказать как ловить сразу несколько типов исключений с несколькими блоками catch. И наверно вместо ex.ToString() было лучше... или точнее сказать было бы информативнее использовать ex.Message
Приветствую всех! Подскажите, пожалуйста, как в Visual Studio 2022 отключить автосохранение проектов? Только начал изучать программирование, и уже измучался - захожу в проекты с примерами из уроков, чтобы поэкспериментировать и пописать фигню чтобы лучше понять и запомнить, а фигня автоматически сохраняется)))
Приветствую! Во время просмотра урока №13 придумал себе дз. Заключается оно в том: на рабочем столе нет файла 1.txt и я прошу программу его удалить. (если он есть - он удалится успешно), следом программа говорит, что файла нет. создать его? При нажатии на "да" она его создает. Следом сообщает, что файл создан. Удалить его? При нажатии на да, она его должна удалить. Но она выводит ошибку "Процусс не может получить доступ к файлу "...1.txt" так как этот файл используется другим процессом. Как это исправить? void Button1_Click(object sender, EventArgs e) { //попробуй сделать try { File.Delete(@"C:\Users\Lutci\Desktop\1.txt"); { DialogResult result = MessageBox.Show("Такого файла нет. Создать?", "Опача", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { File.Create(@"C:\Users\Lutci\Desktop\1.txt"); } try { DialogResult result2 = MessageBox.Show("Файл успешно создан. Удалить?", "Опача", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result2 == DialogResult.Yes) { File.Delete(@"C:\Users\Lutci\Desktop\1.txt"); } } catch { File.Exists(@"C:\Users\Lutci\Desktop\1.txt"); DialogResult result3 = MessageBox.Show("Файл не удален. Попробовать ещё раз?", "Опача", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result3 == DialogResult.Yes) { File.Delete(@"C:\Users\Lutci\Desktop\1.txt"); } } }
} //если не получилось, то сделай это catch { File.Delete(@"C:\Users\Lutci\Desktop\1.txt"); }
Привет 🖐 File.Create - очень плохая практика. Замени на File.AppendAllText Таким образом файл не будет занят. Create требует его освобождения (Close, Dispose и прочее, но лучше даже не вникать). Create никогда не делается. Далее в курсе показано как работать с созданием файлов, написанием и т.д. Пока делай Просто File.AppendAllText
Доброго времянки суток Господа! Подскажите а как скрыть окно Ошибки ? Сам код: no such element: Unable to locate element: {"method":"css selector","selector":".link"} (Session info: chrome=91.0.4472.106). Когда программа не находит Элемент на стр. сайта окно с ошибкой, когда есть все хорошо
В этом комменте будет неслабое полотно текста, но, надеюсь, оно будет полезно кому-либо Первое. Я тут обратил внимание как ты переименовываешь свои переменные. В общем, если выбрать переменную в любом месте (объявление, инициализация, использование где-то --- не суть), нажать F2 и переименовать, то VS переименует ее везде где она используется, но в пределах контекста. То-бишь: { int i = 0; i++; } { int i = 3; i += 2; } i в первых скобках и во вторых - это 2 разные i, соответственно переименование i в первых скобках не затронет ее во вторых. Видео, конечно, относительно старое, так что, возможно, ты уже знаешь об этом, но лишним в любом случае не будет х) Второе. Можно трай-кэтч может перехватывать конкретные исключения и пропускать остальные Пример: try { byte i = Convert.ToByte(ReadLine()); } catch(OverflowException) { WriteLine("Вы ввели слишком большое число"); } В данном случае мы делаем 3 ввода: число 1, число 1234, и строку qwer. Число 1 подходит байту и не выбрасывает исключений вообще. Число 1234 находится за пределами байта (от 0 до 255) и выбрасывает исключение OverflowException, которое мы перехватываем, переходим в кэтч и получаем на вывод строку "Вы ввели слишком большое число". Строка qwer вообще не подходит байту т.к. байт принимает только числа, и в итоге мы получаем исключение FormatException. Мы его никак не обрабатываем в кэтче, и в итоге программа выбрасывает исключение как обычно Можно модифицировать данный код на обработку нескольких исключений: try { byte i = Convert.ToByte(ReadLine()); } catch(OverflowException) { WriteLine("Вы ввели слишком большое число"); } catch(FormatException) { WriteLine("Вы ввели недопустимый символ"); } В этом случае числа 1 и 1234 срабатывают как и в предыдущем (1 - нормально проходит, 1234 - обрабатывается исключением соответственно), НО мы также обрабатываем FormatException и получаем на вывод "Вы ввели недопустимый символ". На мой взгляд весьма полезная штука, когда мы хотим чтобы юзверь знал, что он делает что-то не так, но не хотим останавливать работу программы или пугать его тонной страшных кракозябр, которые ему не нужны. Ну или банально ловить только те исключения, которые мы хотим, но при этом не трогать остальные Также важный момент: классы OverFlowException, FormatException, etc являются наследниками класса SystemException, который в свою очередь является наследником класса Exception. Так что можно писать catch(OverflowException ex) и использовать его аналогично твоему примеру в видео catch(Exception ex), но для одного конкретного исключения (в данном случае оверфлоу). Например, выводить юзверю простое "Вы ввели слишком большое число", но в то же время в лог-файлы записывать ошибку полностью. Так же можно еще модифицировать код выше: try { byte i = Convert.ToByte(ReadLine()); } catch (OverflowException) { WriteLine("Вы ввели слишком большое число"); } catch (FormatException) { WriteLine("Вы ввели недопустимый символ"); } catch (Exception) { WriteLine("Неизвестная ошибка"); } В этом случае мы будем перехватывать оверфлоу и формат и обрабатывать их так как нам нужно, а на все остальные исключения выводить на консоль просто "Неизвестная ошибка". Только нельзя ставить catch (Exception) первым т.к. он просто будет перехватывать все исключения, и остальные кэтчи будут бесполезны. При этом будет ошибка компилятора, и код тупо не скомпилируется Это не все варианты использования трай-кэтч, лишь те, с которыми я успел познакомиться, и также там еще есть свои нюансы. Можно почитать больше тут: docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/try-catch. Да и в целом там тонны полезной инфы по синтаксису, но написано это довольно сложным техническим языком, так что читать может быть туговато. Но все равно чертовски полезный источник инфы
Приветствую Хачатур, спасибо тебе за мега полезные уроки! Просьба не совсем по видео, не могу найти решение: вывести из текстбокса число double с плавающей точкой. Все методы, представленные гуглом не помогают. (Шаг по времени 0.01 с)
@@XpucT вау, даже не насчитывал на такой скорый ответ. Нет, из текст бокса десятисные дроби, потом участвуют в расчете. Т. Е из стринга-текстбокса получить именно double с плавающей точкой. (Например 0.1 или 0.087) и тд
@@XpucT dT = double.Parse(textBox4.Text); V2 = Convert.ToDouble(textBox3.Text); эти способы работают, только в том случае, когда в текстбоксы вводятся только целые числа
Convert.ToDouble(textBox3.Text); - этого более чем достаточно. Скорее всего Ты вводишь 0.33 вместо 0,33 Тебе нужно создать событие, которое заменяет точку на запятую 👍 Показывал в уроке Regex, если не ошибаюсь.
Почему File.Move и Directory.Move умеют только нормально переименовывать файл хотя в описании написано , что они перемещают в новую папку файл а вместо перемещения в новую директорию они создают папку.Я пробовал всяко разно изменять путь. И File.Copy такая же чешуя. Ах да, еще и Exception выбрасывает якобы не удалось найти часть пути.
Вот это действительно косяк. Сам первый раз вообще выпал, когда столкнулся. Можно рекурсией файлы таскать, как предлагается, но Я лично делаю это через Basic: Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory("sourse", "destination"); Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory("sourse", "destination");
Тут два варианта: Вы либо смотрели в перемотке и материал таким образом не рекомендую изучать, либо где-то внутри Вас сидит учитель и шепчет: покажи утуберам, кто тут кодер =) Таймкод: 12:21
@@XpucT спасибо большое) Конечно и не думал Вас учить и замечаниям делать, просто ради throw и зашёл) Буду внимательнее) Возможно в метро просто отвлекся и не углядел
А по какой причине у меня finally не выполняется выдает ошибку на второй try, оповещение не выводится, а вышло оповещение один раз, когда код сменил во время запуска private void Button1_Click(object sender, EventArgs e) { try { Directory.Delete(@"D:\Рабочий стол\Sasha\PROGIS\ю"); } catch { label1.Text = "НЕТ ТАКОЙ ПАПКИ!!!"; } finally { try { Directory.Delete(@"D:\Рабочий стол\Sasha\PROGIS\ю"); } finally { MessageBox.Show("Харэ тыкать","Бомбёж", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } Оповещение вышло, только когда я во время запущенной программы стёр MessageBoxButtons.OK, MessageBoxIcon.Asterisk. после стерания MessageBoxButtons.OK, MessageBoxIcon.Asterisk. перебрасывает на program.cs показывает ошибку нажимаешь продолжить и выходит оповещение MessageBox, что за фигня не могу понять
Выдаёт ошибку, потому что она не обрабатывается с помощью catch и программа ломается. До finally добраться нельзя, если сломать программу, что собственно Ты и делаешь, не обрабатывая catch во второй раз.
Лучше вместо
Clipboard.Clear();
Clipboard.SetText()
использовать
Clipboard.SetObject()
он с меньшей долей вероятности вываливает ошибку, что буфер не инициализирован
охохо))) Работает 🤟🏻
Закрепил 👍
Что-то не работает( С первым способом все копирует и вставляет, со вторым просто чистит буфер обмена.
Clipboard.SetDataObject(), наверное)
@@XpucT охохо ес
try
{
Читать метанит, половину не понять
}
catch
{
смотреть уроки от XpucT
}
finally
{
поставить лайк на видео
}
на одном дыхании все 22 минуты просмотрел)))Спасибо за такие хорошие уроки
Мужик, балдёжно объясняешь, а главное понятно. Однозначно лайк
Мне нравится тактика изложения материала, все по полочкам и по порядку... в голове каши нету. Спасибо за лёгкое обучение с#...
просто и наглядно. то, что я искал. спасибо!
Читаю не всегда понятные книги по C# а потом прихожу на этот канал за розъянениями. Спасибо автору.
Вник, поставил лайк, перешел к следующему видео. Спасибо, все доступно и понятно.
Лучший! Сэнсэй! Здоровья тебе и долгих лет жизни! После 19 уроков мне захотелось, вот просто хочу и все! Чтоб нажал по кнопке и текст из файла перекочевал в другой файл, вот хочу я так и все.
void button1_Click(object sender, EventArgs e)
{
Method();
}
void Method()
{
string r;
string schit = @"C:\1.txt";
string zapis = @"C:\2.txt";
using (StreamReader sr = new StreamReader(schit, System.Text.Encoding.Default))
{
r = sr.ReadToEnd();
}
using (StreamWriter sw = new StreamWriter(zapis, false, System.Text.Encoding.Default))
{
sw.WriteLine(r);
}
}
Благодаря Вам программирование превращается в =) СПАСИБО!
Лучший из лучших, много видосов пересмотрел, этот - самый понятный
Спасибо за гайд. Очень полезно!
Огромное спасибо, интересные уроки супер.
Огонь объясняешь. Динамично.
*Зачем finally если код внутри него выполниться в любом случае, как и код после finally?*
*Ответ:* finally используют для завершения потоков в основном. Да и так по красивше смотриться, когда в блоке try/catch/finally связанные данные.
Не всегда выполняется код после finally. Например, у Вас есть try catch finally, где catch ловит, допустим, IndexOfOutException, а у вас вылетает IOException. И в этом случае, когда Вы ожидаете поймать одно исключение, но ловите НЕ ПРЕДУСМОТРЕННОЕ исключение, которое никак не обрабатываете, вот тогда то что за finally не выполнится, а сам finally выполнится.
Сложна, но хоть кто-то дал нормальный пример. Спасибо
Спасибо за занятия Хачатур.
Оо, так catch - можно юзать для записей ошибок в log, чтобы пользователи просто могли логи кидать, и ты сам смотрел ошибки =) + можно добавлять время, чтобы понимать когда ошибка была совершена)
*+*
Более того, объекты класса Excaption обладают всей необходимой информацией об ошибке. "За кулисами", когда возникает ошибка в Try, создается объект Excaption в той переменной (а если точнее, то переменная с ссылкой на объект), которую вы указали в скобочках - "ex" или "e" обычно. И через эту переменную можно получить всю всю информацию об ошибке. А если этой информации вам все же недостаточно, то так сказать, раскручиваем ООП на полную - наследуемся от Excapton, дополняем его дополнительными нужными нам полями, свойствами, методами, событиями и т.д. Таким образом мы инкапсулируем весь код в отдельный класс, и избавляемся от шаблонного в мэйне. Например, нужно писать ошибки в файл? - ок - Наследуемся от Excaption, Пишем в нем метод void SaveToFile(string fileName){//код сохранения данных в fineName }.
@@АндрейГоляновский-х4й Thanks Dude :)
Отличные уроки
еще по поводу остальных видов исключений. Из видео как-то не очень понятно, зачем они вообще, раз можно все отловить общим исключением Exception. Тем не менее, кэтчей может быть несколько, в первом ловим один вид исключения и посылаем юзера по одному адресу, в следующем кэтче - по другому, а если уж обстоятельства крайне неясные и косяк затерялся в глубинах кода, ловим в конце Exception. Спасибо за видео! Все очень круто, и легко и весело смотрится)
Просто шикарное объяснение, лайк автору
Уря я теперь умею обходить это зловредное исключение как оно меня мучало) а когда пробовал сам чёт не чего не получалось всё равно вылезало противное сообщение. Теперь я доволен и спокойно на сердце) Спасибо Хачатур я в своих познаниях благодаря тебе преодолел ещё одну ступеньку, как там говорится курочка по зёрнешку)))
Спасибо, примеры топ
Спасибо большое за информацию! Лайкусик +1 😎👍✊🔥
Нас учили и говорили создавать свои собственные исключения=), а еще можно типа прописывать куеву тучу catch с определённым видом исключения, и определённый catch словит ту или иную ошибку, визуально превращается в как switch. Ваш код куда приятнее=)
catch на самом деле дорогое удовольствие, если на все случаи его использовать.
Желательно предусматривать всё так, чтобы catch не понадобился.
Хачатур, расскажи пожалуйста, можно ли менять положение формы в конструкторе или самому её приближать/увеличивать? Пробовал гуглить, не нагуглил
Вроде бы нельзя. Сделано, чтобы Ты видел точно, как она будет выглядеть.
Стоит уточнить, что finally выполняется не всегда. Самый простой случай:
try { Close(); }
catch { MessageBox.Show("catch block's working"); }
finally { MessageBox.Show("Bugaga"); }
Плюс если из Диспетчера закрыть программу, но это, пожалуй, очевидно. Плюс при работе с потоками, но это попозже.
классные уроки все с полпинка понятно)
Рекомендую обрабатывать конкретные классы потомки exception, в таком случае не нужно будет кучу ветвлений городить. Если вы в первом catch напишите (exception ex) вы перекроете себе возможность ловить конкретные типы классов наследников exception.
Как всегда на высоте!
Спасибо бро! Выручил )
Наверное, стоит отметить, что директории это тоже файлы
у любого исключения есть , замечательное свойство ,которое возвращает только текст конкретной ошибки, без всякого хлама и мусора, это Message - Возвращает сообщение, описывающее текущее исключение
поэтому лучше писать
catch( Exception e )
{
MessageBox.Show(e.Message, "что-то пошло не так")
}
Еще можно было бы рассказать как ловить сразу несколько типов исключений с несколькими блоками catch. И наверно вместо ex.ToString() было лучше... или точнее сказать было бы информативнее использовать ex.Message
Хачатур привет
видео очень крутое, нужно раз 5 посмотреть, чтоб усвоилось))
А можно в (try, catch, finally) писать тернарно код, чтоб сократить код ?
Можно 👍
спасибо))
Приветствую всех! Подскажите, пожалуйста, как в Visual Studio 2022 отключить автосохранение проектов? Только начал изучать программирование, и уже измучался - захожу в проекты с примерами из уроков, чтобы поэкспериментировать и пописать фигню чтобы лучше понять и запомнить, а фигня автоматически сохраняется)))
Я поставил 100ый лайк
Приветствую! Во время просмотра урока №13 придумал себе дз.
Заключается оно в том: на рабочем столе нет файла 1.txt и я прошу программу его удалить. (если он есть - он удалится успешно), следом программа говорит, что файла нет. создать его? При нажатии на "да" она его создает. Следом сообщает, что файл создан. Удалить его? При нажатии на да, она его должна удалить. Но она выводит ошибку "Процусс не может получить доступ к файлу "...1.txt" так как этот файл используется другим процессом. Как это исправить?
void Button1_Click(object sender, EventArgs e)
{
//попробуй сделать
try
{
File.Delete(@"C:\Users\Lutci\Desktop\1.txt");
{
DialogResult result = MessageBox.Show("Такого файла нет. Создать?", "Опача",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
File.Create(@"C:\Users\Lutci\Desktop\1.txt");
}
try
{
DialogResult result2 = MessageBox.Show("Файл успешно создан. Удалить?", "Опача",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result2 == DialogResult.Yes)
{
File.Delete(@"C:\Users\Lutci\Desktop\1.txt");
}
}
catch
{
File.Exists(@"C:\Users\Lutci\Desktop\1.txt");
DialogResult result3 = MessageBox.Show("Файл не удален. Попробовать ещё раз?", "Опача",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result3 == DialogResult.Yes)
{
File.Delete(@"C:\Users\Lutci\Desktop\1.txt");
}
}
}
}
//если не получилось, то сделай это
catch
{
File.Delete(@"C:\Users\Lutci\Desktop\1.txt");
}
Привет 🖐
File.Create - очень плохая практика.
Замени на File.AppendAllText
Таким образом файл не будет занят.
Create требует его освобождения (Close, Dispose и прочее, но лучше даже не вникать).
Create никогда не делается. Далее в курсе показано как работать с созданием файлов, написанием и т.д.
Пока делай Просто File.AppendAllText
Доброго времянки суток Господа!
Подскажите а как скрыть окно Ошибки ?
Сам код:
no such element: Unable to locate element: {"method":"css selector","selector":".link"}
(Session info: chrome=91.0.4472.106).
Когда программа не находит Элемент на стр. сайта окно с ошибкой, когда есть все хорошо
В этом комменте будет неслабое полотно текста, но, надеюсь, оно будет полезно кому-либо
Первое. Я тут обратил внимание как ты переименовываешь свои переменные. В общем, если выбрать переменную в любом месте (объявление, инициализация, использование где-то --- не суть), нажать F2 и переименовать, то VS переименует ее везде где она используется, но в пределах контекста. То-бишь:
{
int i = 0;
i++;
}
{
int i = 3;
i += 2;
}
i в первых скобках и во вторых - это 2 разные i, соответственно переименование i в первых скобках не затронет ее во вторых.
Видео, конечно, относительно старое, так что, возможно, ты уже знаешь об этом, но лишним в любом случае не будет х)
Второе. Можно трай-кэтч может перехватывать конкретные исключения и пропускать остальные
Пример:
try
{
byte i = Convert.ToByte(ReadLine());
}
catch(OverflowException)
{
WriteLine("Вы ввели слишком большое число");
}
В данном случае мы делаем 3 ввода: число 1, число 1234, и строку qwer.
Число 1 подходит байту и не выбрасывает исключений вообще.
Число 1234 находится за пределами байта (от 0 до 255) и выбрасывает исключение OverflowException, которое мы перехватываем, переходим в кэтч и получаем на вывод строку "Вы ввели слишком большое число".
Строка qwer вообще не подходит байту т.к. байт принимает только числа, и в итоге мы получаем исключение FormatException. Мы его никак не обрабатываем в кэтче, и в итоге программа выбрасывает исключение как обычно
Можно модифицировать данный код на обработку нескольких исключений:
try
{
byte i = Convert.ToByte(ReadLine());
}
catch(OverflowException)
{
WriteLine("Вы ввели слишком большое число");
}
catch(FormatException)
{
WriteLine("Вы ввели недопустимый символ");
}
В этом случае числа 1 и 1234 срабатывают как и в предыдущем (1 - нормально проходит, 1234 - обрабатывается исключением соответственно), НО мы также обрабатываем FormatException и получаем на вывод "Вы ввели недопустимый символ".
На мой взгляд весьма полезная штука, когда мы хотим чтобы юзверь знал, что он делает что-то не так, но не хотим останавливать работу программы или пугать его тонной страшных кракозябр, которые ему не нужны. Ну или банально ловить только те исключения, которые мы хотим, но при этом не трогать остальные
Также важный момент: классы OverFlowException, FormatException, etc являются наследниками класса SystemException, который в свою очередь является наследником класса Exception.
Так что можно писать catch(OverflowException ex) и использовать его аналогично твоему примеру в видео catch(Exception ex), но для одного конкретного исключения (в данном случае оверфлоу). Например, выводить юзверю простое "Вы ввели слишком большое число", но в то же время в лог-файлы записывать ошибку полностью.
Так же можно еще модифицировать код выше:
try
{
byte i = Convert.ToByte(ReadLine());
}
catch (OverflowException)
{
WriteLine("Вы ввели слишком большое число");
}
catch (FormatException)
{
WriteLine("Вы ввели недопустимый символ");
}
catch (Exception)
{
WriteLine("Неизвестная ошибка");
}
В этом случае мы будем перехватывать оверфлоу и формат и обрабатывать их так как нам нужно, а на все остальные исключения выводить на консоль просто "Неизвестная ошибка". Только нельзя ставить catch (Exception) первым т.к. он просто будет перехватывать все исключения, и остальные кэтчи будут бесполезны. При этом будет ошибка компилятора, и код тупо не скомпилируется
Это не все варианты использования трай-кэтч, лишь те, с которыми я успел познакомиться, и также там еще есть свои нюансы. Можно почитать больше тут: docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/try-catch. Да и в целом там тонны полезной инфы по синтаксису, но написано это довольно сложным техническим языком, так что читать может быть туговато. Но все равно чертовски полезный источник инфы
Здравствуйте, Хачатур, подскажите пожалуйста как впихнуть в переменную случайно сгенерированное значение (цифру в int например), заранее благодарю ✌️
Добрый день 🖐
Random random = new Random();
int number = random.Next(1, 20); // Случайное число от 1 до 20
@@XpucT от 1 до 19, вроде, не?
лайк!
Как отправить сообщение или файл на почту или в телегу можешь объяснить пожалуйста?
Перезадай этот вопрос на форуме:
win10tweaker.ru/forum/forum/%d1%81/
Приветствую Хачатур, спасибо тебе за мега полезные уроки! Просьба не совсем по видео, не могу найти решение: вывести из текстбокса число double с плавающей точкой. Все методы, представленные гуглом не помогают. (Шаг по времени 0.01 с)
Привет, Толя 🖐
Не совсем понял, в чём проблема.
Просто из числа в текст перевести? Такой урок был.
@@XpucT вау, даже не насчитывал на такой скорый ответ. Нет, из текст бокса десятисные дроби, потом участвуют в расчете. Т. Е из стринга-текстбокса получить именно double с плавающей точкой. (Например 0.1 или 0.087) и тд
@@XpucT dT = double.Parse(textBox4.Text);
V2 = Convert.ToDouble(textBox3.Text);
эти способы работают, только в том случае, когда в текстбоксы вводятся только целые числа
Convert.ToDouble(textBox3.Text); - этого более чем достаточно.
Скорее всего Ты вводишь 0.33 вместо 0,33
Тебе нужно создать событие, которое заменяет точку на запятую 👍
Показывал в уроке Regex, если не ошибаюсь.
@@XpucT спасибо огромное!!!
УМОЛЯЮ СКАЖИТЕ ГДЕ ТАКОЙ КУРСОР ВЗЯТЬ
Win 10 Tweaker ➜ Интерфейс ➜ Установить авторские чёрные курсоры
Почему File.Move и Directory.Move умеют только нормально переименовывать файл хотя в описании написано , что они перемещают в новую папку файл а вместо перемещения в новую директорию они создают папку.Я пробовал всяко разно изменять путь. И File.Copy такая же чешуя. Ах да, еще и Exception выбрасывает якобы не удалось найти часть пути.
Вот это действительно косяк. Сам первый раз вообще выпал, когда столкнулся.
Можно рекурсией файлы таскать, как предлагается, но Я лично делаю это через Basic:
Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory("sourse", "destination");
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory("sourse", "destination");
@@XpucT Я сам себя обманул с условием.У меня переменная для создания папки и копирования в созданную папку было общим.
12:01 пон
Иногда пишут просто throw; Не понял, зачем так делать
Чтобы сознательно выбило ошибку.
А где throw?
Тут два варианта:
Вы либо смотрели в перемотке и материал таким образом не рекомендую изучать, либо где-то внутри Вас сидит учитель и шепчет: покажи утуберам, кто тут кодер =)
Таймкод: 12:21
@@XpucT спасибо большое) Конечно и не думал Вас учить и замечаниям делать, просто ради throw и зашёл) Буду внимательнее) Возможно в метро просто отвлекся и не углядел
@@F_elixfelicis ;)
@@XpucT и вопрос не по теме, не будет уроков по wpf mvvm?
@@F_elixfelicis очень вероятно, что будут, потому что в сети не видел ещё ни одного урока или курса, чтобы была понятна модель с первых шагов.
А по какой причине у меня finally не выполняется выдает ошибку на второй try, оповещение не выводится, а вышло оповещение один раз, когда код сменил во время запуска private void Button1_Click(object sender, EventArgs e)
{
try
{
Directory.Delete(@"D:\Рабочий стол\Sasha\PROGIS\ю");
}
catch
{
label1.Text = "НЕТ ТАКОЙ ПАПКИ!!!";
}
finally
{
try
{
Directory.Delete(@"D:\Рабочий стол\Sasha\PROGIS\ю");
}
finally
{
MessageBox.Show("Харэ тыкать","Бомбёж", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
Оповещение вышло, только когда я во время запущенной программы стёр MessageBoxButtons.OK, MessageBoxIcon.Asterisk.
после стерания MessageBoxButtons.OK, MessageBoxIcon.Asterisk. перебрасывает на program.cs показывает ошибку нажимаешь продолжить и выходит оповещение MessageBox, что за фигня не могу понять
Выдаёт ошибку, потому что она не обрабатывается с помощью catch и программа ломается.
До finally добраться нельзя, если сломать программу, что собственно Ты и делаешь, не обрабатывая catch во второй раз.