Чикишев М.В. ПрИ-102 - #1
Conversation
Renamed uri 2 url and fixed validating logic
Added user choose for overwrite or no
Feature/skip if error
Validating urls
| if (valid is false) | ||
| Console.Write("\nВведите нужные URL через пробел: "); | ||
| result = Console.ReadLine()!.Split(); | ||
| var valid = result.Any(IsValidUrl); |
There was a problem hiding this comment.
Это некорректная валидация, в твоём коде главное чтобы был хотя бы 1 валидный урл, а остальные без разницы
| /// <returns>bool</returns> | ||
| private static bool IsValidUrl(string str) | ||
| { | ||
| string strRegex = @"((http|https)://)(www.)?" + |
There was a problem hiding this comment.
Вообще тут не обязательно регекс, можно через System.Uri сделать чтобы не изобретать пеловисед
| { | ||
| Console.Write("Do you want to overwrite file? [y/n] "); | ||
| var pressedKey = Console.ReadKey(true); | ||
| while (pressedKey.Key is not (ConsoleKey.Y or ConsoleKey.N)) |
There was a problem hiding this comment.
Тут нет смысла от while, всё равно это рекурсия
Это даже вредно потому что ты не возвращаешь результат рекурсивного метода, у тебя в итоге из цикла никогда не получится выйти (потому что условие while не меняется)
|
|
||
| var cts = new CancellationTokenSource(); | ||
| Console.CancelKeyPress += (_, _) => cts.Cancel(); | ||
| Console.CancelKeyPress += (_, _) => cts.Cancel(); // а что так можно было?! |
There was a problem hiding this comment.
Можно, это частая практика привязывать cts к ивентам
| Console.CancelKeyPress += (_, _) => cts.Cancel(); // а что так можно было?! | ||
|
|
||
| var uris = Input.GetUris(); | ||
| var urls = Input.GetUrls(); |
There was a problem hiding this comment.
В данном случае, кстати, (как и почти всегда впринципе) разница между Uri и Url не важна, это почти что одно и то же
| try | ||
| { | ||
| if (ct.IsCancellationRequested) | ||
| ct.ThrowIfCancellationRequested(); |
There was a problem hiding this comment.
Эта if проверка уже вложена в ThrowIfCancellationRequested. Вот бы у него в имени это было написано...
| { | ||
| if (ex is OperationCanceledException) | ||
| { | ||
| destStream.Close(); |
There was a problem hiding this comment.
Лучше вызвать DisposeAsync, он сделает и Close и Flush и всё на свете
| { | ||
| var file = new FileInfo(Console.ReadLine()!); | ||
| if (file.Exists && (!ChooseToOverwrite())) | ||
| GetOutputFile(); |
There was a problem hiding this comment.
Та же ошибка, ты не возвращаешь результат вызова рекурсивного метода

"Please commit changes immediately asap"
- Сумасандаран Самаланбаман